これは非常に苛立たしい初心者の質問ですが、Rails プロジェクトでオブジェクトのイテレーションをまったく機能させることができないようです。「写真」と「土地利用」の 2 つのモデルがあり、どちらも has_and_belongs_to_many 関連付けがあります。すべてがコンソールで期待どおりに機能します。
ただし、写真を表示するアクションでは、写真に関連付けられた土地利用のリストを生成するコードを解読できないようです。私のコードは次のようになります。
<% for use in @photo.land_uses %>
<%= use.name %>
<% end %>
それは出力を生成しません。私も試しました:
<% @photo.land_uses.each do |use| %>
<%= use.name %>
<% end %>
...そしてそれもうまくいきません。
コンソールで次のようなことを試してみると:
photo = Photo.first
photo.land_uses
写真が属するすべての土地利用のリストを取得しましたが、驚くことではありません。
では、その用途のリストを繰り返し処理し、各用途の名前を出力するにはどうすればよいでしょうか?
私は Ruby を初めて使用しますが、PHP で同じことをしようとすると、単純な foreach ループになります。
foreach($photo->land_uses as $use) {
echo $use->name;
}
それで、私はここで何が欠けていますか?
更新: 要求されたモデルは次のとおりです。
--写真モデル--
class Photo < ActiveRecord::Base
belongs_to :user
belongs_to :transect
belongs_to :focus
has_and_belongs_to_many :land_uses
validates :caption, :presence => true
validates :place, :presence => true
validates :city, :presence => true
validates :country, :presence => true
has_attached_file :file,
:processors => [:watermark],
:styles => { :standard => "631x631>",
:marked => { :geometry => "631x631>", :watermark_path => "#{Rails.root}/public/images/watermark.png", :position => 'Center' },
:thumbnail => "174x130#"
},
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => ":user_id/:year/:month/:id/:style.:extension"
geocoded_by :location, :latitude => :lat, :longitude => :lng
after_validation :fetch_coordinates
def location
[place,city,state,country].delete_if{|val| val==''||nil}.join(', ')
end
end
-- 土地利用モデル --
class LandUse < ActiveRecord::Base
has_and_belongs_to_many :photos
validates_uniqueness_of :name
end
RE: エラー メッセージ... for または each アプローチでエラー メッセージが表示されません。土地利用のリストがあるはずの場所に空白が表示されるだけです。
ありがとう!