gpt4 book ai didi

ruby-on-rails - rails : Custom nested controller actions

转载 作者:行者123 更新时间:2023-12-04 03:43:29 25 4
gpt4 key购买 nike

我想设置一个自定义的嵌套 Controller 操作,但我无法弄清楚路由。

我不断收到以下错误

No route matches [GET] "/assets"

路由文件
resources :companies do
resources :requests do
match :accept
end
end

索引文件
<% @requests.each do |request| %>
<ul class="users">
<li>
<%= full_name(request.profile) %>
<%= request.status %>
<%= link_to "Accept",
:controller => "requests", :action => "accept",
:id => request.id %>
</li>
</ul>
<% end %>

最佳答案

有几个问题:路由到 accept操作并构建嵌套资源的 URL。

定义自定义操作

您可以使用以下语法向 RESTful 资源添加自定义操作:

resources :requests do
get 'accept', :on => :member
end

这将为您提供如下所示的路线:
requests/:id/accept

您可以使用以下方法在 View 中生成路径:
accept_request_path(a_request)
:on => :member part 表示您要针对每个单独的请求路由到一个新操作,而不是所有请求的集合。如果您使用 :on => :collection路线是 requests/accept
嵌套资源

嵌套资源时:
resources :companies do
resources :requests do
get 'accept', :on => :member
end
end

你会得到看起来像这样的路由,请注意,因为请求嵌套在公司内部,路由包括 company_id和一个 id :
companies/:company_id/requests/:id/accept

和这样的助手:
accept_company_request_path(a_company, a_request)

您可以像您目前正在尝试的那样长期执行此操作,例如:
<%= link_to "Accept",
:controller => "requests", :action => "accept",
:id => request.id, :company_id => request.company.id %>

但是使用助手更容易:
<%= link_to "Accept", accept_company_request_path(request.company, request) %>

适当的动词

Accept 听起来很像以某种方式更新您的数据库的东西,如果是这种情况,您应该考虑使用 PUT请求而不是 GET要求。

HTTP/1.1 规范说,已经建立了约定,即 GET 和 HEAD 方法不应该具有执行检索( RFC2616, section 9 )以外的操作的意义,检索具有现实世界的含义,即非人类 Web 客户端 - 搜索引擎索引器、浏览器扩展等 - 允许跟踪链接(发出 GET 请求),但不允许提交发出其他类型请求的表单。

如果您确实切换到使用 PUT然后请求 button_to helper会派上用场。与 link_to 一样您可以将 Controller 、 Action 、方法和路由所需的所有参数传递给 button_to :
<%= button_to 'Accept',
{:controller => :requests, :action => :accept,
:company_id => request.company, :id => request},
:method => :put %>

或者您可以使用帮助程序生成更容易的路径:
<%= button_to 'Accept',
accept_company_request_path(request.company, request),
:method => :put %>

更多文档
  • Adding more RESTful actions
  • Nested resources
  • 关于ruby-on-rails - rails : Custom nested controller actions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273069/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com