Rails 4.1
Ruby 2.1.1
我有一个应用程序,我需要在其中显示指向 Controller 显示方法的链接。据我所知,像这样的事情会做到这一点:
<%= link_to "Agent", agents_path(:id => agent.id), :class => "btn btn-warning" %>
但是当 Rails 生成链接时,它是这样的:
http://mydomain/agents?id=9
我需要的是
http://mydomain/agents/9.
当我手动输入时,我得到代理/显示 View 。我如何到达那里?
在我的 route ,我没有为特工做任何特别的事情。这是 routes.rb 中的相关代码:
resources :agents
这意味着它将生成所有路由。
rake 路由输出:
agents GET /agents(.:format) agents#index
POST /agents(.:format) agents#create
new_agent GET /agents/new(.:format) agents#new
edit_agent GET /agents/:id/edit(.:format) agents#edit
agent GET /agents/:id(.:format) agents#show
PATCH /agents/:id(.:format) agents#update
PUT /agents/:id(.:format) agents#update
DELETE /agents/:id(.:format) agents#destroy
我在生成路由时没有遇到任何错误
解决方案:
抱歉,我使用的是 agent_path,而不是 agents_path。我曾经尝试过 agents_path,作为我尝试过的事情之一。问题是我有两种不同的看法。其中,我使用了正确的语法:
<%= link_to "Agent", agent_path(agent.id), :class => "btn btn-warning" %>
在另一个我使用的是:
<%= link_to "Agent", agents_path(:id => agent.id), :class => "btn btn-warning" %>
我一直在对其中一个进行更改,而实际上正在渲染另一个。我将正确的语法放在了部分中,现在它工作正常。这个故事的寓意是始终使用部分,即使你认为你不需要它们。
最佳答案
您需要 agent_path
而不是 agents_path
,并且不需要指定 id
。这会工作得很好:
<%= link_to "Agent", agent_path(agent), :class => "btn btn-warning" %>
每当对路由有疑问时,您可以随时运行:
bundle exec rake routes
您将能够看到所有现有路线及其命名。
关于ruby-on-rails - Rails 中的链接和路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748210/