3

こんにちは、コードの何が問題なのかわかりません。私は2つのモデルItemsとImagesとそれらの間の関係を持っています

 class Item < ActiveRecord::Base
  attr_accessible :category_id, :user_id, :title, :description, :published, :start_date, :end_date, :images_attributes
  has_many  :images, :dependent => :destroy
  accepts_nested_attributes_for :images, :reject_if => :all_blank, :allow_destroy => true
  mount_uploader :name, ImageUploader 
end

class Image < ActiveRecord::Base
  belongs_to :item
  mount_uploader :image, ImageUploader  
  attr_accessible :item_id, :name  
end

items_controller.rb で Carrierwave の 3 つのインスタンスを呼び出して、作成したアイテムに 3 つの画像を追加します。

def new
    @item = Item.new
    3.times { @item.images.build }
  end

ビュー フォームは次のようになります。

<%= f.fields_for :images  do |builder| %>
   <p> <%= builder.text_field :name  %> </p>
 <% end %>

この乱れたコードの結果は次のとおりです。 <input id="item_images_attributes_0_name" name="item[images_attributes][0][name]" type="file">

新しいアイテムを追加して保存すると、データベースにファイル名(suit.jpg) の代わりに オブジェクト データが保存されます。

--- !ruby/object:ActionDispatch::Http::UploadedFile 
content_type: image/jpeg
headers: |
  Content-Disposition: form-data; name="item[images_attributes][0][name]"; filename="suit.jpg"
  Content-Type: image/jpeg

original_filename: suit.jpg
tempfile: !ru

以下のデータベース テーブルのスクリーン ショット:

https://lh3.googleusercontent.com/_USg4QWvHRS0/TXDT0Fn-NuI/AAAAAAAAHL8/91Qgyp5jK3Q/carrierwave-objest-database-saved.jpg

それを解決する方法を知っている人はいますか?

4

2 に答える 2

1

まず最初に、アップローダーを :image という名前の列にマウントしますが、データベースの写真からは、その名前の列がありません。

1: image という名前の画像用の列を作成します (「それがあなたのアップロードであるため」)。

rails g migration add_image_to_images image:string
rake db:migrate

2: モデルの attr_accessible を更新して、新しい列を使用します。

class Image < ActiveRecord::Base
  belongs_to :item
  mount_uploader :image, ImageUploader  
  attr_accessible :item_id, :name, :image  
end

3: ビューを更新する

<%= f.fields_for :images  do |builder| %>
  <p> 
    <%= builder.text_field :name  %>
    <%= builder.file_field :image  %> 
  </p>      
<% end %>

4: 未使用のマウントをアイテム クラスから削除します。

class Item < ActiveRecord::Base
  attr_accessible :category_id, :user_id, :title, :description, :published, :start_date, :end_date, :images_attributes
  has_many  :images, :dependent => :destroy
  accepts_nested_attributes_for :images, :reject_if => :all_blank, :allow_destroy => true
end

画像に追加できる任意の値として使用するために、画像に :name を残しました。

また、あなたのように画像モデルを抽象化することで、画像の順序を追跡したいと思うので、そのための追加の列も良い考えです.

お役に立てれば。

于 2013-02-14T23:11:03.193 に答える