0

Paperclip、ActiveAdmin、および Formtastic でフォームを作成するにはどうすればよいですか? 画像はモデルの一部ではなく、サブモデルの一部です。

私は試した:

form :html => {:multipart => true} do |f|
   f.inputs "Ticket Info" do
      ...
      f.input :image1.photo
      f.input :image2.photo

しかし、それはエラーを出しましたActionView::Template::Error (undefined method 'photo' for :image1:Symbol):

チケットモデルは次のとおりです。

class Ticket < ActiveRecord::Base
  attr_accessible ... :image1_id, :image2_id
...
  belongs_to :image1, class_name: "TicketImage"
  belongs_to :image2, class_name: "TicketImage"

これが TicketImage モデルです。

class TicketImage < ActiveRecord::Base
  attr_accessible :file, :photo
  has_one :ticket
  has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
end

私も試しf.input :image1ましたが、空の選択ボックスが表示されました。


も試しf.input :image1, :as => :fileましたが、ファイルを選択して送信をクリックすると、次のエラーが表示されました。

ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update
TicketImage(#89768376) expected, got ActionDispatch::Http::UploadedFile(#29533068)

私も試しました

  f.semantic_fields_for :image1 do |image|   
        image.input :photo, :as => :file, :name => "Image1"
  end
  f.semantic_fields_for :image2 do |image|   
        image.input :photo, :as => :file, :name => "Image2"
  end

しかし、写真というラベルの付いたファイル選択ボタンが1つしか表示されず、送信した後、次のエラーが発生しました:

ActiveRecord::AssociationTypeMismatch in Admin::TicketsController#update
TicketImage(#86546820) expected, got ActiveSupport::HashWithIndifferentAccess(#20656416)

私もこれを試しました:追加:

ActiveAdmin.register Ticket do
    ...
    f.input :photo, :as => :file, :for => :image1, :name => "Image 1"

class Ticket < ActiveRecord::Base
  attr_accessible ... :image1_id, :image2_id, :image1_attributes, ...
  accepts_nested_attributes_for :image1, :image2, :allow_destroy => true


class TicketImage < ActiveRecord::Base
  attr_accessible :file, :photo, :photo_file_name, :photo_content_type, :photo_file_size, :photo_updated_at

ファイルのアップロード ボックスが表示され、アップロードを受け入れますが、ログには次のように表示されます。

WARNING: Can't mass-assign protected attributes: photo

私もこれを試しました.1つのアップロードフィールドで動作しますが、両方をフォームに入れると、どちらも表示されません! サーバーログにもエラーはありません:

  f.semantic_fields_for :image1 do |image|
    image.input :photo, :as => :file, :name => "Image1", :hint => image.object.nil? ? "No Image" : f.template.image_tag(image.object.photo.url(:thumb))
  end
  # f.semantic_fields_for :image2 do |image|   
    # image.input :photo, :as => :file, :name => "Image2", :hint => image.object.nil? ? "No Image" : f.template.image_tag(image.object.photo.url(:thumb))
  # end

私もこれを試してみましたが、これは完全に機能し、画像を保存するように見えますが、単一のエントリである image1 フィールドとの 1 対多の関連付けを作成できます。image1 に 2 つの画像を追加しようとしたことはありませんが、クラッシュすることが予想されます。

  f.has_many :image1  do |p|
    p.input :photo, :as => :file, :label => "Image 1", :hint => p.template.image_tag(p.object.photo.url(:thumb)) 
    p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image'
  end
  f.has_many :image2  do |p|
    p.input :photo, :as => :file, :label => "Image 2", :hint => p.template.image_tag(p.object.photo.url(:thumb)) 
    p.input :_destroy, :as=>:boolean, :required => false, :label => 'Remove image'
  end

これは最も効果的ですが、ヒントは機能しません!

  f.inputs :photo, :as => :file, :for => :image1, :name => "Image 1", :hint => "A Hint"
  f.inputs :photo, :as => :file, :for => :image2, :name => "Image 2", :hint => "A Hint"
4

1 に答える 1

1

ネストされたフォームも Formtastic でサポートされています。

form :html => {:multipart => true} do |f|
  f.input :number
  f.semantic_fields_for :image1 do |image|   
    image.input :photo, :name => "Image1"
  f.semantic_fields_for :image2 do |image|   
    image.input :photo, :name => "Image2"
于 2013-03-04T01:21:01.723 に答える