我正在尝试为carrierwave构建一个表单:remote_image_url上传,但除了在控制台中我无法上传它,因为我无法弄清楚如何从表单中使用remote_image_url访问params哈希。 / p>
Image belongs_to :imageable
和Post has_many :images, as: :imageable, accepts_nested_attributes_for :images
上传器已安装在Image上,文件上传工作正常。我还可以使用post.images.create(remote_image_url: [link text])
image.rb
class Image < ApplicationRecord
mount_uploader :image, ImageUploader
belongs_to :imageable, polymorphic: true
end
new.html
<%= form_for(@post, :url => posts_path, html: { multipart: true }, remote: true) do |f| %>
<%= f.fields_for :images do |image| %>
<%= image.text_field :remote_image_url %>
<% end %>
<% end %>
表格中的参数:
"post"=>{"images_attributes"=>{"0"=>{"remote_image_url"=>" [link text] "}}}
我尝试使用params[:images_attributes]["0"][:remote_image_url], params[:remote_image_url], params[:images_attributes], params[:images_attributes][][:remote_image_url]
手动访问posts_controller中的params以及我能想到的所有内容,但它要么为文件创建一个null值的图像,要么返回NoMethodError (undefined method '[]' for nil:NilClass)
。尝试在控制器中手动创建图像也感觉相当苛刻(如果使用file_field进行常规上传,我不需要这样做),但是它甚至不会尝试创建图像。
posts_controller.rb
def create
@post = current_user.link_posts.build(link_post_params)
respond_to do |format|
format.html {
if @post.save
@post.images.create(remote_image_url: params[:images_attributes]["0"][:remote_image_url])
flash[:success] = "Post created!"
redirect_to request.referrer || root_url
else
redirect_to new_link_post_path
flash[:warning] = @post.errors.full_messages.to_sentence.html_safe
end
}
end
end
private
def link_post_params
params.require(:post).permit(:content, images_attributes: [:image, :remove_image, :image_cache, :image_post_id, :remote_image_url, :_destroy])
end