Gui*_*ois 1 ruby routing namespaces module ruby-on-rails
我刚刚开始使用rails,直到现在我对它非常满意,但有一点我无法弄清楚.
我在命名空间"Monitor"中有一些ActiveRecords模型,我在命名空间"设置"中有一些控制器.我想要完成的是我可以在我的设置控制器/表单中使用命名空间模型.
我有这个:
/config/routes.rb
namespace :settings do
resources :queues, :channels
end
Run Code Online (Sandbox Code Playgroud)
/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
Run Code Online (Sandbox Code Playgroud)
/app/models/monitor/queue.rb
module Monitor
class Queue < ActiveRecord::Base
end
end
Run Code Online (Sandbox Code Playgroud)
/app/views/settings/form.html.erb
<%= form_for @queue do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
现在Rails抱怨缺少一个方法:monitor_queues_path或者Rails生成一个/monitor/queues代替的路径/settings/queues(:new/edit).
我在这里错过了什么?
啊啊我找到了!
这篇文章给了我正确的解决方案: Rails namecoped模型对象没有模块前缀路由路径
问题来自ActiveRecord类的前缀:
module Monitor
class Queue < ActiveRecord::Base
end
end
Run Code Online (Sandbox Code Playgroud)
这应该是
module Monitor
class Queue < ActiveRecord::Base
def self.model_name
ActiveModel::Name.new("Monitor::Queue", nil, "Queue")
end
end
end
Run Code Online (Sandbox Code Playgroud)
更改后我只需要以正确的方式更改form_for:
<%= form_for [:settings, @queue] do |f| %>
Run Code Online (Sandbox Code Playgroud)
这解决了它:D
| 归档时间: |
|
| 查看次数: |
1309 次 |
| 最近记录: |