Rails 4 - 将id转换为params中的model

时间:2015-03-18 18:04:27

标签: ruby-on-rails ruby json

当我尝试在数据库中插入新记录时,我的代码错误输出:

@user_request = UserRequest.new(user_request_params)

我有一个属于另一个的模型。用户在下拉列表中选择子模型,并在json中发送id:

{"user_request"=>{"product_ids"=>["86", "79"], "sub_model_id"=>"5"}

模式

UserRequest
  has_and_belongs_to_many :products
  has_one :sub_model

SubModel
  belongs_to :user_request

Product
  has_and_belongs_to_many :user_requests

产品插入db没有问题(如果忽略子模型),但SubModel不是。我收到这个错误:

ActiveRecord::UnknownAttributeError (unknown attribute: sub_model_id):
  app/controllers/user_requests_controller.rb:44:in `create'

我试图通过这样做来预测参数:

def user_request_params
    params.require(:user_request).permit(:sub_model_id, :product_ids => [])
    #the above line was there, added these lines:
    sub_id = params[:user_request][:sub_model_id]
    sub = SubModel.find(sub_id)
    params[:user_request].delete(:sub_model_id)
    params[:user_request][:sub_model] = sub
    params
end

生成以下JSON:

{"user_request"=>{"product_ids"=>["86", "79"], "sub_model"=>#<SubModel id: 5, ...} 

但现在我收到了这个错误:

ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):

app / controllers / user_requests_controller.rb:42:在'create&#39;

子模型由网站管理员(他们确实存在)预先生成。

如何保存UserRequest?

1 个答案:

答案 0 :(得分:1)

UserRequest表在数据库中没有sub_model_id列,因此会引发您的错误。在迁移和交换关联中指定它:

UserRequest
  has_and_belongs_to_many :products
  belongs_to :sub_model

SubModel
  has_one :user_request