0

これは非常に苛立たしい初心者の質問ですが、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 アプローチでエラー メッセージが表示されません。土地利用のリストがあるはずの場所に空白が表示されるだけです。

ありがとう!

4

1 に答える 1

0

なんて恥ずかしい…

問題が見つかりました。土地利用の名前を印刷するための私の最初の解決策はどちらもうまくいきました。問題は、データを正しくシードしていなかったため、テストしていた写真に土地利用が保存されていなかったことです (したがって、エラー メッセージは表示されませんが、コンテンツも表示されません)。シード ファイルを修正し、ビューが期待どおりにレンダリングされるようにしました。

ご覧いただきありがとうございます。

于 2010-11-07T23:45:53.213 に答える