【问题标题】:Rails iterationRails 迭代
【发布时间】:2010-11-07 21:20:49
【问题描述】:

这是一个非常令人沮丧的新手问题,但我似乎无法在我的 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

RE:错误消息... 无论是 for 还是 each 方法,我都没有收到错误消息,我只是在应该有土地用途列表的地方得到一个空白区域。

谢谢!

【问题讨论】:

  • @photo.land_uses.map(&amp;:name) 告诉你什么?
  • @Tass:在似乎什么也没做的视图中,在控制台中它正确地返回了土地使用的数组。
  • 也许最重要的问题首先要解决:我的代码看起来是否应该工作?我对 Ruby 很陌生,所以我的猜测是我忽略了一些关于 for 或 each 方法的明显内容并输入了错误的内容......你怎么看?
  • 请发布上述命令的输出。
  • ["Institutional","Civic"] ...见下文,我发现了问题所在。谢谢!

标签: ruby-on-rails ruby loops for-loop block


【解决方案1】:

好尴尬……

我发现了问题。我用于打印土地使用名称的两个原始解决方案都运行良好。问题是我没有正确播种数据,所以我正在测试的照片没有保存任何土地使用(因此没有错误消息,但也没有内容)。修复了种子文件,视图按预期呈现。

感谢观看。

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2016-06-21
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多