我有一个标记的项目列表,我想列出每个项目旁边的标记名称。例如:
我很酷的清单项目 - “很棒的标签”
每个列表项都有一个且只有一个标记; tag_id
是我的列表中的外键,它是我模型中的必填字段。
我一直在考虑我可以尝试这样做的方法,但对最佳实践并不十分确定......
使用所有标记的数组创建一个@tags
类变量,并为每个列表项循环遍历它以查看id是否匹配。如果是,则显示标签名称。
在我的list_item
模型中有一个自定义方法,我遍历列表项并将标记名称附加到列表对象,以便我可以通过@list_item.tag_name
在我的视图中访问它(我不确定这是否可以这样做。)
编写自定义SQL查询以将标记名称转换为活动记录结果。例如:
SELECT list.descriptions, tag.name
FROM list_items AS list
INNER JOIN tags AS tag
ON(list.tag_id = tag.id)
虽然它似乎是最资源友好的,但第三种选择对于一些非常基本的东西来说似乎很多工作。
如果您想要任何其他信息,请使用Holler。
答案 0 :(得分:1)
使用委托
在list_item模型中添加此行
delegate :name, :to => :tag, :prefix => true
现在您可以使用
访问标记名称@ list_item.tag_name
这更像是你的第二个选择。
在此处查看有关委托的更多详细信息: http://www.simonecarletti.com/blog/2009/12/inside-ruby-on-rails-delegate/
答案 1 :(得分:0)
你也可以使用:
@list_item.tag.name
它不需要任何额外的代码,因此对那些不熟悉delegate
的人来说是可以理解的。