1

应用理念:

我目前正在构建一个 Ruby on Rails [3.2] 应用程序,它由 2 个非常基本accounts的控制器组成 - 用于用户身份验证,并且messages属于帐户。

# 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

问题:

我希望用户在不使用 URL 中的 ID 参数的情况下访问他们的帐户,如下所示:example.com/accounts/,它工作得很好。

每当我尝试去:example.com/accounts/messages但是,rails 将“消息”视为accounts_controller! 我现在可以访问消息的唯一方法是:/accounts/5236/messages- 这不是我想要的。

我的问题是,有没有办法阻止/屏蔽 rails 检查我的帐户控制器上的参数,以便我可以像上面的示例一样访问我的消息?我真的对此感到困惑,所以请分享您的想法和想法!

4

2 回答 2

1

只是为了解决这个问题,我决定在我的routes.rb文件中使用这个解决方案:

get "/accounts/messages" => "messages#index", :as => :message

这很好用,但唯一的缺点是,如果您在帐户名称空间下添加控制器,则每次都必须手动添加。那好吧。

ForgetTheNorm 下面还有一个很棒的替代解决方案,如果这对您不起作用,请试一试!

于 2013-04-17T09:00:35.870 回答
1

您定义的路线

resources :accounts do
  resources :messages
end

意味着您只能拥有这样的 URL:

/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
于 2013-04-17T08:39:52.390 回答