不允许的参数::photos_attributes

我想以嵌套形式使用神社的宝石, 但是发生了

不允许的参数::photos_attributes

如何解决? 我尝试了一些方法,

def blog_form_params
  params.require(:blog_form).permit(:title,:content ).merge!(user_id: current_user.id,:photos_attributes =>[:image,:id,:destroy ])
end

def blog_form_params
 params.require(:blog_form).permit(:title,photos_attributes: {:image,:destroy })
end

等等,但是我无法解决这个错误是什么问题? 请告诉我如何解决

强大的参数

 def blog_form_params
   params.require(:blog_form).permit(:title,:content ).merge!(user_id: 
   current_user.id,photos_attributes: [:image,:destroy ])
  end

BlogForm.rb

 class BlogForm


 include activeModel::Model

 attr_accessor :title,:content,:user_id,:photos

 def blog_builder

@user = User.find(user_id) 

@blogs = @user.blogs.create(title: title,content: content )

return @blogs

end


concerning :PhotosBuilder do

  attr_reader :photos_attributes


  def photos
    @blogs = blog_builder
    @photos ||= @blogs.photos.new
 end

 def photos_attributes=(attributes)
   @blogs = blog_builder
@photos ||= @blogs.photos.new(attributes)
 end

end

def build_association


  @user.photos << @photos if @photos != nil

end


 def save
   return false if invalid?
   blog_builder
   @blogs.save
   @photos.save if @photos != nil
   build_association

 end
end

发送参数

{"authenticity_token"=>"qDssddHt4EhfFWN33SPMk2F5fcvPToh143hrwilw0p98HK2RMEwdKDF7QsGYiSQ7AQHN02lpdBaCbSAed80Swg==","blog_form"=>{"title"=>"","content"=>"sample","photos_attributes"=> 
  {"image"=>#<actionDispatch::Http::UploadedFile:0x00007f92408f07a8 @ 
   tempfile=#<Tempfile:/tmp/RackMultipart20200406-4102-1x3utj1.png>,@original_filename="p8-1.png",@content_type="image/png",@headers="Content-Disposition: form-data; 
    name=\"blog_form[photos_attributes][image]\"; filename=\"p8- 
    1.png\"\r\nContent-Type: image/png\r\n">}},"commit"=>"create","user_id"=>"2"}  

blog.rb

class Blog < ApplicationRecord
 belongs_to :user
 has_many :photos
 validates :title,presence: true
 validates :content,presence: true

end

photo.rb

 class Photo < ApplicationRecord
  belongs_to :blog
  belongs_to :user
  include ImageUploader[:image]

end

uploader.rb

   class ImageUploader < Shrine
    end

shrine.rb

   require "shrine/storage/file_system"


Shrine.storages = {
   cache: Shrine::Storage::FileSystem.new("public",prefix: "uploads/cache"),# temporary
   store: Shrine::Storage::FileSystem.new("public",prefix: "uploads/store"),# permanent
 }


Shrine.plugin :activerecord
Shrine.plugin :cached_attachment_data

blogs_controller

  def new

    @blog_form = BlogForm.new

 end

    def create

       @blog_form = BlogForm.new(blog_form_params)
       if @blog_form.save
       redirect_to user_blogs_path
       else
         #False action
       end

     end

 def blog_form_params
    params.require(:blog_form).permit(:title,photos_attributes: 
     [:image] ).merge!(user_id: current_user.id)
  end

我可以解决这个问题, 相反,我无法合并user_id 然后发生了activeRecord :: RecordNotFound(找不到没有ID的用户):

  def blog_builder


@user = User.find(user_id)#Here is a new problem

@blogs = @user.blogs.create(title: title,content: content )

return @blogs

end

也许我可以发送参数

(byebug) blog_form_params                                                                                               
 <actionController::Parameters {"title"=>"","photos_attributes"=><actionController::Parameters {"image"=># 
  <actionDispatch::Http::UploadedFile:0x00007f9240bc77b0 @tempfile=# 
  <Tempfile:/tmp/RackMultipart20200406-4102-rc9eo6.png>,@headers="Content-Disposition: form-data; 
  name=\"blog_form[photos_attributes][image]\"; filename=\"p8- 
  1.png\"\r\nContent-Type: image/png\r\n">} permitted: true>,"user_id"=>2} 
  permitted: true>  

所以错误归因于形成对象

我上传了blog_form.rb

def blog_builder


@user = User.find(params[:user_id])#previously User.find(user_id)

@blogs = @user.blogs.create(title: title,content: content )

return @blogs

end

不起作用,我进入了(byebug)params [:user_id] *** NameError异常:#

的未定义局部变量或方法'params'

我更改了user_id而不是params [:user_id] 这样

(byebug)  @blog_form.user_id=params[:user_id]                                                                           
 NoMethodError Exception: undefined method `user_id=' for nil:NilClass                                                                                                                                                                   
 nil   

创建

def create

@blog_form = BlogForm.new(blog_form_params)
@blog_form.user_id=params[:user_id]
if @blog_form.save

博客表格

def blog_builder


@user = User.find(user_id)

@blogs = @user.blogs.create(title: title,content: content )

return @blogs

end

blog_form_params

  (byebug) blog_form_params                                                                                               
  <actionController::Parameters {"title"=>"title","photos_attributes"=><actionController::Parameters {"image"=># 
  <actionDispatch::Http::UploadedFile:0x00007f80f5209680 @tempfile=# 
  <Tempfile:/tmp/RackMultipart20200407-10555-iewcks.png>,@headers="Content-Disposition: form-data; 
   name=\"blog_form[photos_attributes][image]\"; filename=\"p8- 
   1.png\"\r\nContent-Type: image/png\r\n">} permitted: true>,"user_id"=>2} 
   permitted: true>

我想如何发送一个user_id,非常感谢Fernand,Amit Patel, 我在视图字段中使用了hidden_​​field而不是合并方法

daiqilin1970 回答:不允许的参数::photos_attributes

这是因为您将photos_attributes放置在合并部分中,而不是blog_form属性

这如何:

params.require(:blog_form).permit(:title,:content,:photos_attributes =>[:image,:id,:destroy] )

然后更新blogs_controller:

def create
  @blog_form = BlogForm.new(blog_form_params)
  @blog_form.user_id=params[:user_id]
  ...

然后在BlogForm.rb中:

def blog_builder
  @user = User.find(user_id)
  ...
本文链接:https://www.f2er.com/2502240.html

大家都在问