我有一个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不是真正的数据库列
答案 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添加到所选属性列表中。