Railsは初めてで、空のネストされたfile_fieldを拒否しようとしていますが、それでも続行します。これがセットアップです。
編集:実際には、画像が含まれている場合は適切に保存されますが、空の画像は拒否されません。
フィッシュモデル
class Finish < ActiveRecord::Base
default_scope order('finishes.id ASC')
attr_accessible :name,
:title,
##belongs_to##
:sku_id,
##has_many##
:image_attributes
belongs_to :skus
has_one :image, as: :imageable, :dependent => :destroy
accepts_nested_attributes_for :image, :reject_if => lambda { |a| a[:asset].blank? }, :allow_destroy => true
validates_presence_of :title
before_save :create_name
private
def create_name
self.name = title.parameterize
end
end
フィニッシュコントローラー
def new
@finish = Finish.new
@finish.build_image
respond_to do |format|
format.html # new.html.erb
# format.json { render json: @finish }
end
end
画像モデル
class Image < ActiveRecord::Base
attr_accessible :content, #remove if no longer necessary
:asset
belongs_to :imageable, polymorphic: true
mount_uploader :asset, ImageUploader
end
形
= form_for @finish, :html => { :multipart => true } do |f|
- if @finish.errors.any?
#error_explanation
%h1= "#{pluralize(@finish.errors.count, "error")} prohibited this finish from being saved:"
%ul
- @finish.errors.full_messages.each do |msg|
%li= msg
%fieldset{id: "finishes"}
.field
= f.label :title
= f.text_field :title
#finish-image.images
= f.fields_for :image do |image_builder|
= render 'images/image_fields', f: image_builder
.actions
= f.submit 'Save'
image_fields パーシャル
.field
= f.label :asset, "Image"
= f.file_field :asset
- if f.object.asset
.image-box
= image_tag f.object.asset_url(:thumb).to_s
.remove-fields
= link_to_remove_fields f