嵌套表单呈现未知属性错误
Nested form renders unknown attribute error
我正在使用 gem 嵌套形式 https://github.com/ryanb/nested_form 以创建包含多张图片的平面图。
平面模型有很多图片。
表格看起来像这样:
<%= simple_nested_form_for @flat do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.fields_for :pictures do |pictures_form| %>
<%= pictures_form.file_field :image %>
<%= pictures_form.link_to_remove ('<i class="fa fa-trash"></i>').html_safe %>
<% end %>
<%= f.link_to_add ('<i class="fa fa-plus"></i>').html_safe, :pictures %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我的控制器创建动作:
def create
@flat = Flat.new(flat_params)
authorize @flat
@flat.user = current_user
@flat.pictures.build
if @flat.save
redirect_to flat_path(@flat), notice: 'Flat was successfully created.'
else
render :new
end
end
和我的 flat_params :
def flat_params
params.require(:flat).permit(:name, pictures_attributes: [:id, :image, :_destroy])
end
我总是收到以下错误:
图片的未知属性 'image'。
我使用 gem 回形针上传图片 这是我的 table 图片在我的架构中的样子:
create_table "pictures", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.integer "flat_id"
end
有什么问题?
为什么要在 create
方法中 构建 ?这是您仅保存的地方:
def new
@flat = Flat.new
@flat.pictures.build #-> pictures.build should be in the new method only
end
def create
@flat = Flat.new flat_params
@flat.user = current_user
authorize @flat
if @flat.save
redirect_to @flat, notice: 'Flat was successfully created.'
else
render :new
end
end
除上述之外 (pictures.build
),您的代码看起来不错。
您 可能 遇到的另一个问题是您没有在 Picture
模型中包含 Paperclip 参考。您需要具备以下条件:
#app/models/picture.rb
class Picture < ActiveRecord::Base
has_attached_file :image #-> + any styling options etc
end
根据您提供的代码,这就是我能提供的。
我正在使用 gem 嵌套形式 https://github.com/ryanb/nested_form 以创建包含多张图片的平面图。 平面模型有很多图片。 表格看起来像这样:
<%= simple_nested_form_for @flat do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.fields_for :pictures do |pictures_form| %>
<%= pictures_form.file_field :image %>
<%= pictures_form.link_to_remove ('<i class="fa fa-trash"></i>').html_safe %>
<% end %>
<%= f.link_to_add ('<i class="fa fa-plus"></i>').html_safe, :pictures %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我的控制器创建动作:
def create
@flat = Flat.new(flat_params)
authorize @flat
@flat.user = current_user
@flat.pictures.build
if @flat.save
redirect_to flat_path(@flat), notice: 'Flat was successfully created.'
else
render :new
end
end
和我的 flat_params :
def flat_params
params.require(:flat).permit(:name, pictures_attributes: [:id, :image, :_destroy])
end
我总是收到以下错误: 图片的未知属性 'image'。
我使用 gem 回形针上传图片 这是我的 table 图片在我的架构中的样子:
create_table "pictures", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.integer "flat_id"
end
有什么问题?
为什么要在 create
方法中 构建 ?这是您仅保存的地方:
def new
@flat = Flat.new
@flat.pictures.build #-> pictures.build should be in the new method only
end
def create
@flat = Flat.new flat_params
@flat.user = current_user
authorize @flat
if @flat.save
redirect_to @flat, notice: 'Flat was successfully created.'
else
render :new
end
end
除上述之外 (pictures.build
),您的代码看起来不错。
您 可能 遇到的另一个问题是您没有在 Picture
模型中包含 Paperclip 参考。您需要具备以下条件:
#app/models/picture.rb
class Picture < ActiveRecord::Base
has_attached_file :image #-> + any styling options etc
end
根据您提供的代码,这就是我能提供的。