这是一个非常令人沮丧的新手问题,但我似乎无法让对象的迭代在我的 rails 项目中工作。我有两个模型,“Photo”和“LandUse”,它们都有一个 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
回复:错误消息...我没有收到使用 for 或 each 方法的错误消息,我只是在应该有土地用途列表的地方得到一个空白区域。
谢谢!