如何将字符串作为Rails路径助手的参数?

时间:2014-10-23 16:31:49

标签: ruby-on-rails activerecord parameter-passing helper

我想像这样调用一个路径助手

link_to t, tag_path(),其中t是一个字符串。

最好的方法是什么?


更多细节:

通常情况下,t会是一个标记记录,因此我可以tag_path(t)向我发送带有标记ID的标记路径。但我被限制为字符串,而不是活动记录对象或整数。

我尝试了tag_path(Tag.find_by_name(t)),但是给了我一个uninitialized constant ActionView::CompiledTemplates::Tag的浏览器错误,可能是因为我试图从属于除tags_controller以外的控制器的视图中调用它。

我不想在控制器中缓存标记记录,因为可能有大量标记,而且他们不点击(如果有的话)所有标记都会浪费查询。

如果它正在进行查找,最好是延迟加载,这样只有在用户点击链接时它才会查询数据库。


更新

= raw(hack.cached_tag_list).split(', ').each{ |t| link_to t, tag_path(ActsAsTaggableOn::Tag.find_by_name(t)) }.join(', ')

存储的字符串数据 efficiency, food

= hack.cached_tag_list.split(', ')会在浏览器上打印["efficiency", "food"]

= hack.cached_tag_list.split(', ').each { |t| t}会在浏览器中显示["efficiency", "food"] ...非常奇怪。


完整解决方案:

绕过处理不会改变的方法,我反而在苗条的

中做到这一点
- hack.cached_tag_list.split(',').each do |t|
  = link_to t.strip, tag_path(t.strip)
  ' ,

1 个答案:

答案 0 :(得分:1)

你几乎在试图按名称找到标签,但我认为你的名称空间错了。它可能是你正在使用标记宝石,如ActsAsTaggable。在这种情况下,Tag模型将位于Gem的名称空间下,例如:ActsAsTaggable::Tag。因此,您可以通过执行以下操作找到标记:ActsAsTaggable::Tag.find_by_name(t)