0

Soundcloud から音楽を取り込む Rails アプリがあります。このデータにはタイトルが含まれており、タイトルとして保存してmix.sc_titleいますが、常に適切にフォーマットされているわけではありません。Mix モデルに追加の属性を追加しました。mix.override_title

私のサイトに表示するために、利用可能な場合はオーバーライド タイトルを使用し、それ以外の場合は sc_title を使用したいと考えています。

これを行うためのMixモデルメソッドがあります

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>

ご覧のとおり、ミックス アトリビュートを直接使用していないため、DB にアクセスすると大きな打撃を受けますが、実際にはその恩恵を受けていません。

必要な情報だけを取得するためのより効率的な方法はありますか? ( mix.display_title)

試してみMix.select("display_title").where(:active => true)ましたが、display_title が実際の DB 列ではないため失敗します

4

1 に答える 1

0

Mix.select("sc_title, override_title").where(:active => true)これらはメソッドが使用する実際のフィールドであるため、実行でき、機能します。追加の属性を取得しても DB ヒットがそれほど大きくなるとは思いませんが、必要なものだけを選択することは有益な場合があります。

より多くのコマンドの連鎖を開始するとき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 に答える