2011-04-20 14 views
0

、あなたが私を提案することができますしてください、この達成するためのより良い方法:私のRailsアプリの内容でRails 3 - より良い方法...私は初心者です!

@infos = @activity.infos 
@infos.each do |info| 
    @activity.name = info.title if info.language_id == 1 
end 

EDIT

は多くの言語で挿入することができますが、それらの一方のみに表示されます。他の言語はXML出力としてのみ使用されます。 しかし、私はこのアプローチを使用している主な原因は、「name」属性なしで私はこのようなコレクションを作成することはできないということである:なし

<%= collection_select(:event, :activity_id, @activities, :id, :name) %> 

は、あなたがこれを達成するためにどのように私を提案することができますし」アクティビティの「名前」属性ですか?

ありがとうございます!

+1

論理的には奇妙に見えます。アクティビティに関連付けられた最後の情報のlanguage_idに基づいて、アクティビティの名前を設定していますか?あなたがしようとしていることを明確にすることはできますか? –

+0

どのようにすればいいですか? –

+0

私は論理的に良い意味です!私のやり方は明らかにばかげた;-) – Abramodj

答えて

3

このようなことができます。

info = @activity.infos.select{|info| info.language_id == 1}.last 
@activity.name = info.title 
2

さて、あなたは反復を失う可能性が...

@activity.name = @activity.infos.find(:first, :conditions => { :language_id => 1 }).title 

が、それはあなたが(現実の世界で)結果を得ることができます保証するものではありません。だから、:

info = @activity.infos.find(:first, :conditions => { :language_id => 1 }) 
@activity.name = info.title unless info.nil? 

しかし、これは奇妙なアプローチであるコメントで述べたように - あなたは値をこのように割り当てることをしようとしている場合は、あなたのアプリ/データと構造的に何か問題がありますように思えます。

3
他と同じ

が、レール3に述べた他の人のよう

@activity.name = @activity.infos.where(:language_id => 1).first.title 

で利用可能ですARrelの構文を使用して...あなたは、あなたのデザインを再考したいかもしれません。なぜこれをしようとしているのかについてもっと詳しく説明すると、これにつながる基になるデザインを手助けすることができます。

関連する問題