【发布时间】:2018-07-23 03:06:23
【问题描述】:
我有一个关于 Rails 5 的路由问题。我的 config/routes.rb 文件中有这个问题
resources :votes
我的 VotesController 中的“show”方法可以采用数字或字符串形式的 ID。
def show
id = params[:id]
if id.present?
# If they entered a name
if id.to_i == 0
name = id.gsub "_", " "
@person = Person.find_by_name(name)
else
@person = Person.find_by_id(id)
end
我曾经能够构造这个link_to来链接到生成带有数字ID的链接的方法...
<%= link_to person.name, vote_path(person), :class => 'unvotedPersonLink' %>
但是,我想生成一个带有 ID 字符串值的链接,该 ID 由我的模型中名为“person.seo_name”的方法定义。所以我尝试了这个
<%= link_to person.name, vote_path(:id => person.seo_name), :class => 'unvotedPersonLink' %>
但出现错误
No route matches {:action=>"show", :controller=>"votes", :id=>nil} missing required keys: [:id]
如何构建我的 link_to 标记,以便它传入我想要的“字符串”参数而不是数字参数?
【问题讨论】:
-
确保 seo_name 方法没有返回 nil
-
vote_path(:id => person.seo_name)只要seo_name有值就应该可以工作。尝试注释掉除resources :votes之外的所有其他路由,以查看是否有其他路由定义受到干扰。 -
您应该能够做到
vote_path(person.seo_name)...您不需要(也不应该)指定:id =>...,因为这意味着第一个参数(链接对象)是@ 987654331@.
标签: ruby-on-rails model-view-controller routes ruby-on-rails-5 link-to