Ruby 捣碎使用

Ruby Mash using

我正在使用 Grape,不明白为什么我不能改变参数 Mash。

  class Publisher < ActiveRecord::Base  
  end

以下工作正常:

  post do
    Publisher.create!({
      name: params[:name],
      partner_id: @current_partner.id
    })
  end

并使用 namepartner_id 在我的数据库中创建新记录

但我在 params 中有很多条目,所以我只想向它们添加 partner_id

  post do
    p params
    params.partner_id = @current_partner.id
    p params
    Publisher.create!(params.require(:name, :partner_id))
  end

输出:

#<Hashie::Mash name="myName">
#<Hashie::Mash name="myName" partner_id=1>

但它在 partner_id

中插入带有 NULL 的行

是否使用不当?

我也不能在 update() 中只使用 params 因为 ActiveModel::ForbiddenAttributesError 它是正确的解决方法吗?

关于update()中的params,这是Rails中的一项安全功能,称为强参数;有关详细信息,请参阅 https://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html and http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters

关于您的第一个问题,我认为您对 require 的调用应该是对 permit 的调用:

Publisher.create!(params.permit(:name, :partner_id))

但这取决于您的请求参数名称是 Rails-like,即 publisher[name],还是像 name 中那样裸露。如果你正在做 Rails-like 参数,你会想要:

Publisher.create!(params.require(:publisher).permit(:name, :partner_id))

我注意到不仅 partner_id 为空,name 也为空。所以 Publisher.create!(params.to_h) 解决了我的问题。