0

我有一个从 Soundcloud 中提取音乐的 Rails 应用程序。此数据包含一个标题,我将其另存为,mix.sc_title但它的格式并不总是正确的。我在我的 Mix 模型上添加了一个附加属性,我称之为mix.override_title

为了在我的网站上显示,我想在可用的情况下使用覆盖标题,并在所有其他情况下使用 sc_title。

我有一个混合模型方法可以为我做这件事

def display_title
    override_title.blank? sc_title : override_title
end

Mixes#index 抓取@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 不是真正的数据库列

4

1 回答 1

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 添加到所选属性列表中。

于 2012-09-07T19:36:55.520 回答