0

我有一个被标记的项目列表,我想在每个项目旁边列出标签名称。例如:

我的酷列表项 - “Awesome Tag”

每个列表项都有一个且只有一个标签;tag_id是我的列表中的外键,它是我的模型中的必填字段。

我一直在考虑可以尝试的方法,但不太确定最佳实践...

  1. 创建一个@tags包含所有标签的数组的类变量,并为每个列表项循环遍历它以查看 id 是否匹配。如果有,请显示标签名称。

  2. 在我的模型中有一个自定义方法,list_item我循环遍历列表项并将标签名称附加到列表对象,以便我可以在我的视图中访问它@list_item.tag_name(我不确定这是否可以通过这种方式完成)。

  3. 编写自定义 SQL 查询以将标签名称添加到活动记录结果中。例如:

    SELECT list.descriptions, tag.name 
    FROM list_items AS list 
    INNER JOIN tags AS tag 
    ON(list.tag_id = tag.id)
    

虽然它似乎是对资源最友好的,但对于如此基本的东西,第三个选项似乎需要做很多工作。

霍勒,如果您想了解更多信息。

4

2 回答 2

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/

于 2012-07-18T07:01:53.597 回答
0

您还可以使用:

@list_item.tag.name

它不需要任何额外的代码,所以对于不熟悉的人来说是可以理解的delegate

于 2012-07-18T08:08:53.483 回答