Ruby on rails 轨道路由模型方法参数

Ruby on rails 轨道路由模型方法参数,ruby-on-rails,Ruby On Rails,我有路线 map.member 'members/:id/:name_url', :controller => 'members', :action => 'show', :requirements => { :id => /\d+/ } 在我的成员模型中,我有一个name_url方法,它接受名称并将其转换为小写,将空格更改为破折号 问题是如果我跑 link_to "Bill", member 它给我一个“未能从中生成成员url”错误 有没有办法做到这一点?我正在考虑

我有路线

map.member 'members/:id/:name_url', :controller => 'members', :action => 'show', :requirements => { :id => /\d+/ }
在我的成员模型中,我有一个name_url方法,它接受名称并将其转换为小写,将空格更改为破折号

问题是如果我跑

link_to "Bill", member
它给我一个“未能从中生成成员url”错误


有没有办法做到这一点?我正在考虑一个生成链接的视图帮助程序,但如果需要…

的话,我无法从控制器访问它,假设这是
成员控制器的显示操作

class MembersController

  def show
    @member = Member.find_by_name("Bill")
  end
app/views/members/show.html.erb
中,您需要使用:

<%= link_to @member.name, member_path(@member, :name_url => "something") %>
“某物”)%%>

问题在于路由中的:name\u url参数:

map.member 'members/:id/:name_url', :controller => 'members', :action => 'show', :requirements => { :id => /\d+/ }
当您将ActiveRecord对象作为url_的一个选项传递(link_to就是这样做的)时,Rails将隐式调用模型的to_param方法。除非重写,否则它只返回id。您可以重写为_param,但这不会提供您想要的url。因为to_参数用于创建替换URL中id的字符串。对于最小的更改,您所能做的最好的事情就是满足于以下内容:

members/:id 
其中:id实际上是
:id-:name\u url

实际上最好的选择是丹·麦克内文的建议。但是,如果这对您来说太长,您可以始终将其作为助手:

def link_to_member member
  link_to member.name, member_url(member, :name_url => member.name)
end
并用它代替链接


link\u to“Bill”,member
=>
link\u to\u member member

是的,这也会起作用,我更好奇的是,是否还有一种方法可以保持:link\u to“Bill”,member的简短语法。如果要考虑简洁性,也许创建一个helper函数就是正确的方法?在视图中:在助手文件中:def member\u link(member)link\u to member.name,member\u path(member,:name\u url=>member.name\u url)endI将其添加到应用程序助手中,唯一的问题是我无法从控制器访问该助手。。。或者我可以吗?你可以把助手包括在你需要的控制器中。但是,您不应该在控制器中使用link_to。我不会的,我只是想获取路径