通过Rails ActiveRecord中的外键获取数据库值

时间:2012-07-18 06:14:09

标签: ruby-on-rails activerecord

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

我很酷的清单项目 - “很棒的标签”

每个列表项都有一个且只有一个标记; 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. 虽然它似乎是最资源友好的,但第三种选择对于一些非常基本的东西来说似乎很多工作。

    如果您想要任何其他信息,请使用Holler。

2 个答案:

答案 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的人来说是可以理解的。