0

我想在同一个控制器中添加一个名为“campaign”的自定义操作,其行为方式与 REST 的“new”类似,但目的不同,所以我想将它们分开。因为,这个活动表格会有一些额外的字段。另一种选择是将额外参数传递给“新”操作,并为常规“新”操作和自定义“活动”呈现不同的模板。但是,我想弄清楚为什么它没有成功。

因此,我想出了以下路线(“消息”是具有“新”和“活动”操作的控制器):

get 'users/:user_id/messages/campaign', as: :campaign_user_message

或者

resources :users do
   resources: messages do
      member do
        get 'campaign'
      end
   end
end

在控制台输出,我得到 ActiverRecord:RecordNotFound 因为它这样做:

Started GET "/users/1/messages/campaign" for 127.0.0.1 at 2012-12-22 00:14:38 -0800
Processing by MessagesController#show as HTML
Parameters: {"user_id"=>"1", "id"=>"campaign"}

我以这种方式调用动作:

link_to campaign_user_message_path(@user)
4

2 回答 2

1

如果你想拥有诸如“/users/1/messages/campaign”之类的路线,你应该这样写:

resources :users do
 resources :messages do
    collection do
      get 'campaign'
    end
 end
end

如果您以自己的方式编写(使用成员 do ... end),您的代码将生成 url“/users/:user_id/messages/:id/campaign”。你应该通过@user和@message:

link_to campaign_user_message_path(@user, @message)
于 2013-01-08T09:36:41.623 回答
0

对于提到的问题,我已经做了类似的事情:

resources :users do
    get 'messages/new_campaign' => 'messages#new_campaign'
    post 'messages/create_campaign' => 'messages#create_campaign'
end

因此,我可以使用 url 帮助程序“user_messages_new_campaign”来获取操作 /users/:user_id/messages/new_campaign”

于 2013-01-08T00:46:08.247 回答