我尝试添加到我的应用'carrierwave'gem.I创建一个类 image_uploader
class ImageUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
并创建一个模型 photo.rb
class Photo < ActiveRecord::Base
mount_uploader :image, ImageUploader
belongs_to :photoable, polymorphic: true
belongs_to :post
end
和 photo.rb 与 post.rb
具有多态关联class Post < ActiveRecord::Base
has_many :comments
has_many :post_attachments
validates :title, :body, presence: true
has_many :photos, as: :photoable
accepts_nested_attributes_for :photos
end
post.rb 具有来自 photo.rb 的嵌套属性
params.require(:post).permit(:title, :body, photo_attributes: [:image])
这是来自 post.rb 模型
的部分 _form.html.haml= form_for [:admin, @post] do |f|
= f.file_field :image
= f.text_field :title, class: "form-control", placeholder: "Title"
= f.text_area :body, rows: 12, class: "form-control", placeholder: "Message"
.pull-right
= f.submit "Send", class: "btn btn-success"
但是当我创建一个带有图片的帖子时,shell会显示错误
Unpermitted parameters: image
如何解决?
抱歉我的英文不好
UPD
schema.rb
create_table "photos", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "image"
t.integer "photoable_id"
t.string "photoable_type"
end
create_table "posts", force: true do |t|
t.string "title"
t.text "body"
t.datetime "created_at"
t.datetime "updated_at"
end
解决
答案 0 :(得分:0)
我认为它应该是photos_attributes
。
params.require(:post).permit(:title, :body, photo_attributes: [:image])
^^
答案 1 :(得分:0)
问题是您没有将fields_for
用于image
属性。
而不是= f.file_field :image
,您需要:
= f.fields_for :photos do |photo_fields| %>
= photo_fields.file_field :image
然后,将params.require(:post).permit(:title, :body, photo_attributes: [:image])
更改为:
params.require(:post).permit(:title, :body, photos_attributes: [:image])