我想像这样调用一个路径助手
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)
' ,
答案 0 :(得分:1)
你几乎在试图按名称找到标签,但我认为你的名称空间错了。它可能是你正在使用标记宝石,如ActsAsTaggable。在这种情况下,Tag模型将位于Gem的名称空间下,例如:ActsAsTaggable::Tag
。因此,您可以通过执行以下操作找到标记:ActsAsTaggable::Tag.find_by_name(t)
。