我正在构建一个Ruby on Rails [3.2]应用程序,它由2个非常基本的控制器组成 - accounts
用于用户身份验证,messages
属于帐户。< / p>
# app/models/account.rb
class Account < ActiveRecord::Base
has_many :messages
end
# app/models/message.rb
class Message < ActiveRecord::Base
belongs_to :accounts
end
然后我粗略地设置我的routes.rb
以允许用户查看嵌套在帐户下的邮件:
# config/routes.rb
resources :accounts do
resources :messages
end
我希望用户无需在网址中使用ID参数即可访问自己的帐户:example.com/accounts/
,效果非常好。
每当我尝试转到:example.com/accounts/messages
时,rails会将“消息”视为accounts_controller
的参数!我现在可以访问消息的唯一方法是:/accounts/5236/messages
- 这不是我想要的。
我的问题是,有没有办法阻止/屏蔽rails检查我的帐户控制器上的参数,以便我可以访问我的消息,如上面的示例?我真的很困惑这个,所以请分享你的想法和想法!
答案 0 :(得分:1)
您定义的路线
resources :accounts do
resources :messages
end
暗示您只能拥有这样的网址:
/accounts/
/accounts/:id
/accounts/:id/:action
/accounts/:id/messages/
/accounts/:id/messages/:id
/accounts/:id/messages/:id/:action
如果要指定URL /accounts/messages/
,则必须在路径
resources :accounts, :collection => { :messages => :get } do
resource :messages
end
答案 1 :(得分:1)
只是为这个问题添加了一些关闭,我决定在routes.rb
文件中使用此解决方案:
get "/accounts/messages" => "messages#index", :as => :message
这很有效,但唯一的缺点是每次如果你在轨道上的帐户命名空间下添加控制器,就必须手动添加它。哦,好吧。
ForgetTheNorm下面还有一个很棒的替代解决方案,所以如果这对你不起作用的话请试一试!