gem Paperclip をインストールして、2 つのモデルを作成しました
class Image < ActiveRecord::Base
belongs_to :pizzerium
attr_accessible :img, :pizzerium_id, :alt
has_attached_file :img, :styles => { :medium => "300x300>", :thumb => "100x70>" }, :default_url => "/images/:style/missing.png"
self.per_page = 6
end
そしてピッツェリアム
class Pizzerium < ActiveRecord::Base
has_many :images
accepts_nested_attributes_for :images, allow_destroy: true
attr_accessible :description, :name, :url, :city, :meta_tag, :text_shedule, :time_begin, :time_end, :week_begin, :week_end
end
コントローラにこのコードを書くと:
@pizzerium = Pizzerium.where("city = ? AND url = ?", params[:city], params[:pizza]).first
@images = @pizzerium.images.all
そして、このコードが表示されます:
<%= image_tag @images.first.img.url(:medium) %>
それは動作しますが、試してみると
@pizzs = Pizzerium.where("city = ?", params[:city]).paginate(:page => params[:page])
また
@pizzs = Pizzerium.includes(:images).where("city = ?", params[:city]).paginate(:page => params[:page])
<% @pizzs.each do |pizzerium| %>
<%= image_tag pizzerium.images.first.img.url %>
<% end %>
エラーが表示されます:
一般的な NoMethodError#index
/home/wwju/rails/pizza/app/views/general/index.html.erb の 14 行目を表示:
nil:NilClass の未定義メソッド「img」
レールコンソールで:
pizzs = Pizzerium.includes(:images).all
Pizzerium Load (31.6ms) SELECT "pizzeria".* FROM "pizzeria"
Image Load (10.3ms) SELECT "images".* FROM "images" WHERE "images"."pizzerium_id" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 32)
=> [#<Pizzerium id: 1, name: "Пицца-шляпа...
...
pizzs.first.images.first.img
=> /system/images/imgs/000/000/017/original/02.jpg?1369309592
1.9.3p429 :027 > pizzs.each do |p|
1.9.3p429 :028 > p.images.first.img
1.9.3p429 :029?> end
NoMethodError: undefined method `img' for nil:NilClass
from (irb):28:in `block in irb_binding'
(間違いを見つけたら、教えてください。私は英語の改善に取り組んでいます。)