Ruby Mash使用

时间:2016-02-09 01:27:18

标签: ruby activerecord grape

我使用Grape并且无法理解为什么我不能改变params 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>

但它在NULL

中的partner_id数据库中插入行

使用不正确吗?

另外我不能仅在params使用update(),因为ActiveModel::ForbiddenAttributesError是否是正确的解决方法?

2 个答案:

答案 0 :(得分:0)

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

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

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

但这取决于您的请求参数名称是否类似于Rails,即publisher[name],或者是name中的裸名称。如果您正在执行类似Rails的参数,则需要:

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

答案 1 :(得分:0)

我注意到partner_id不仅为空,还有name。所以做Publisher.create!(params.to_h)正在解决我的问题。