ActiveRecord“选择”模型方法的结果

时间:2012-09-07 19:31:18

标签: ruby-on-rails-3 activerecord

我有一个Rails应用程序可以从Soundcloud中获取音乐。这个数据包含一个标题,我保存为mix.sc_title,但它并不总是格式正确。我在我的Mix模型中添加了一个额外的属性,我称之为mix.override_title

要在我的网站上显示,我想使用覆盖标题(如果可用)和sc_title(在所有其他情况下)。

我有一个Mix模型方法为我做这个

def display_title
    override_title.blank? sc_title : override_title
end

混合#index grabs @mixes = Mix.where(:active => true)和mixes / index.html.erb看起来像这样:

<ul>
<% @mixes.each do |mix| %>
    <li><%= link_to mix.display_title, mix %></li>
<% end %>
</ul>

正如你所看到的,我并没有直接使用任何混合属性,所以当我进入数据库时​​我受到了很大的打击,而我实际上并没有从中受益。

是否有更精简的方法来获取我需要的信息? (mix.display_title

我已经尝试Mix.select("display_title").where(:active => true)但它失败了,因为display_title不是真正的数据库列

1 个答案:

答案 0 :(得分:0)

您可以执行Mix.select("sc_title, override_title").where(:active => true),它会起作用,因为这些是该方法使用的实际字段。我真的不认为获得额外的属性会让你 大部分数据库命中,但有时只选择你需要的东西可能是有益的。

当您开始链接更多Arel命令时,请考虑将select放入模型方法中:

def select_active_titles
  select("sc_title, override_title").where(:active => true)
end

编辑:您的link_to帮助程序也秘密调用mix.id链接到正确的混合,因此请确保它正常工作,如果没有将id添加到所选属性列表中。