在嵌套属性hash中访问remote_image_url

时间:2017-06-30 14:14:12

标签: ruby-on-rails carrierwave nested-attributes

我正在尝试为carrierwave构建一个表单:remote_image_url上传,但除了在控制台中我无法上传它,因为我无法弄清楚如何从表单中使用remote_image_url访问params哈希。 / p>

Image belongs_to :imageablePost has_many :images, as: :imageable, accepts_nested_attributes_for :images上传器已安装在Image上,文件上传工作正常。我还可以使用post.images.create(remote_image_url: [link text])

在控制台中上传remote_image_url

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

0 个答案:

没有答案