我的应用程序有几种创建通知的方法:
- 用户可以使用标准";新的";方法
- 视图中的链接可以使用专用的"链接"从动作创建通知;new_action">
- 等等
所以我为new_action_notification_path:创建了额外的路线和视图
resources :notifications do
member do
get :new_action
end
collection do
get :index_all
end
end
在控制器中
# GET /notifications/new_action
def new_action
@playground = Playground.find(current_playground)
@notification = @playground.notifications.build( playground_id: params[:playground_id], …
在视图中:
<%= link_to t('Reject'), new_action_notification_path(
playground_id: current_playground,
description: t("#{this_object.class.name}#{'Rejected'}"),
但这并不像预期的那样:如上所述,如果我在视图中写入new_action_notification_path,则生成的URL看起来像/nootification/729/new_action?code=QWSTZ。。。
如果在同一位置写入new_notification_path,则生成的URL看起来像/nootification/new?code=QWSTZ。。。
为什么不同,以及如何从第一个URL中删除通知id?
非常感谢!
您的url不同的原因是因为您有一个嵌套的new_action
路由。
resources :notifications do
member do
get :new_action
end
end
使用嵌套路由,您将获得资源之间的id号。729
是要传递给link_to
辅助对象的id。另一个路由助手new_notification_path
正在创建一个新的通知,因此它不需要id。如果您查看控制台中有rails routes
或浏览器中有localhost:3000/rails/info/routes
的路由,您会发现new_action
需要id。
new_action_notification_path GET /notifications/:id/new_action
new_notification_path GET /notifications
路由的:id
部分是一个id号的占位符(尽管它实际上可以是你传入的任何东西(,用于查找之前的资源。在这种情况下,id用于查找通知。