我想在同一个控制器中添加一个名为“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)
答案 0 :(得分:1)
如果您想拥有诸如“/ users / 1 / messages / campaign”之类的路线,您应该像这样写一下:
resources :users do
resources :messages do
collection do
get 'campaign'
end
end
end
如果您按照自己的方式编写(成员执行...结束),您的代码将生成网址“/ users /:user_id / messages /:id / campaign”。你应该传递@user和@message:
link_to campaign_user_message_path(@user, @message)
答案 1 :(得分:0)
我已经做了类似的事情克服了上述问题:
resources :users do
get 'messages/new_campaign' => 'messages#new_campaign'
post 'messages/create_campaign' => 'messages#create_campaign'
end
所以,我可以使用url helper“user_messages_new_campaign”来获取动作/ users /:user_id / messages / new_campaign“