当我尝试在数据库中插入新记录时,我的代码错误输出:
@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?
答案 0 :(得分:1)
UserRequest
表在数据库中没有sub_model_id
列,因此会引发您的错误。在迁移和交换关联中指定它:
UserRequest
has_and_belongs_to_many :products
belongs_to :sub_model
SubModel
has_one :user_request