2011-07-27 5 views
2

私は、資産ごとにmain_imageを持つモデルを持っています。アタッチメントモデルでは、アセットごとに真の値が1つしかありません。 main_imageがtrueまたはfalseに設定されているかどうかを調べるために、すべてのレコードをループせずにこのレコードを取得する方法があるかどうか疑問に思っています。Railsはループなしで1レコードを取得します

明確化:

<% @asset.attachments.each_with_index do |attachment, i| %> 
    <%= image_tag(attachment.attachment.s_640_480) if !attachment.main_image.nil? && attachment.main_image%> 
<%end%> 

しかし、私はループせずにこれを行う方法を疑問に思って... 私はしません:私は、次のコードを使用して値を見つけることができます

私はそれが動作しません知っているが、基本的にはそれがコンセプトです

<%= image_tag(@attachment.where_main_image.s_640_480) %> 

:任意のより明確にする方法を知っている...しかし、のようなもの

+0

:そうのようなご意見で

class Asset < ActiveRecord::Base has_many :attachments do def main_image where(:main_image => true).first end end end 

使用私たちは確信しますか? – Arsen7

+0

質問を明確にすることはできますか?現在、私はあなたが持っているものとあなたが望むものを理解することはできません。 – rubish

+0

@ Arsen7 Gupta私は明確にしようとしましたが、それはまだ混乱している場合は申し訳ありません。 –

答えて

4
<%= image_tag(@asset.attachments.find_by_main_image(true).attachment.s_640_480) %> 

それはあなたのビューでこのコードを持ってとても素敵ではありませんので、私はあなたの資産モデルのインスタンスメソッドでそれを置くことをお勧めします:

class Asset < ActiveRecord::Base 
    has_many :attachments 

    def main_image 
    attachments.find_by_main_image(true).attachment.s_640_480 
    end 
end 

次に、あなたのビューであなたが行うことができます:

<%= image_tag(@asset.main_image) %> 

おそらく、オブジェクトがnilではないというチェックをいくつか追加する必要があります。がんばろう。

+0

検証作業中です。ありがとうございます! –

0

もし私が知っているのであれば、その値が真実か偽であれば、データベース内のいくつかの項目を見つける必要がありますか?

モデル内にメソッドを作成するか、コントローラーで条件を使用して検索する必要があります。the documentationの中にすべてのものを見つけることができます。

1

あなたがそうのようにそれをアップに参加することができますので、私はほとんどの問題を理解すると仮定しますが、あなたには、いくつかの単純化されたコードの例を投稿できる

<%= image_tag @asset.attachments.main_image.s640_480 %> 
関連する問題