我能在Rails5.2上的rails控制器中有几个新方法吗



我的应用程序有几种创建通知的方法:

  • 用户可以使用标准";新的";方法
  • 视图中的链接可以使用专用的"链接"从动作创建通知;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用于查找通知。

最新更新