我刚开始使用 Rails,直到现在我对它非常满意,但有一件事我想不通。
我在命名空间“Monitor”中有一些 ActiveRecords 模型,在命名空间“Settings”中有一些 Controller 。我想要完成的是我可以在我的设置 Controller /表单中使用命名空间模型。
我有这个:
/config/routes.rb
namespace :settings do
resources :queues, :channels
end
/app/controllers/settings/queus_controller.rb
class Settings::QueuesController < ApplicationController
def new
@queue = Monitor::Queue.new()
render 'form', :layout => false
end
def create
@queue = Monitor::Queue.new(post_params)
if (@queue.save)
@status = 'added'
render 'success'
else
render 'form', :layout => false
end
end
def edit
@queue = Monitor::Queue.find(params[:id])
render 'form', :layout => false
end
...
end
/app/models/monitor/queue.rb
module Monitor
class Queue < ActiveRecord::Base
end
end
/app/views/settings/form.html.erb
<%= form_for @queue do |f| %>
...
<% end %>
现在 Rails 提示缺少方法:monitor_queues_path
或 Rails 生成类似 /monitor/queues
的路径而不是 /settings/queues(:new/编辑)
。
我在这里错过了什么?
最佳答案
啊,我找到了!
这篇文章给了我正确的解决方案: Rails namescoped model object without module prefix route path
问题来自 ActiveRecord 类的前缀:
module Monitor
class Queue < ActiveRecord::Base
end
end
应该是
module Monitor
class Queue < ActiveRecord::Base
def self.model_name
ActiveModel::Name.new("Monitor::Queue", nil, "Queue")
end
end
end
更改后,我只需要以正确的方式更改 form_for:
<%= form_for [:settings, @queue] do |f| %>
然后修复它 :D
关于ruby-on-rails - 命名空间路由和模型路径 rails ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17820007/