ruby-on-rails - Rails 中的链接和路线

标签 ruby-on-rails ruby-on-rails-4.1

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/

相关文章:

ruby-on-rails - 使用 .env 文件在生产环境中设置 SECRET_KEY_BASE

css - Ruby on rails_format 带 Bootstrap 的表单字段

mysql - Rails 4 MySQL bigInt 主键问题和错误

ruby-on-rails - Stripe SCA webhooks 返回 401

ruby-on-rails - 如何正确地重写模块混入的方法?

ruby-on-rails - 相当于“after_new”的Rails回调

javascript - Ember ownsTo 关系在保存时传递为 nil 到服务器

ruby-on-rails - Rails : use REJECT_IF only on CREATE action for nested attributes

ruby - 这种使用案例陈述的做法是不好的吗?

ruby-on-rails - Rails 命令只能在一个终端上运行