所以,我有这个动作是为了保存一个模型:
def create
logger.debug(params[:user_id])
group_id = params['approver']['group_id']
@approver = Approver.new(params[:approver])
@approver.user_id = params[:user_id]
respond_to do |format|
if @approver.save
logger.warn("Approver saved!")
flash[:notice] = "New approver has been added!"
format.html { redirect_to(group_path(group_id)) }
else
flash[:notice] = "Sorry .. had issues adding the approvers!"
format.html { redirect_to(group_path(group_id)) }
end
end
end
传入的参数是:
Parameters: {"commit"=>"Submit", "authenticity_token"=>"C35lovRRjJzekruZiwTZjaMs4KgwiEJnXn10b0nD+0w=", "utf8"=>"✓", "user_id"=>["18"], "approver"=>{"group_id"=>"13"}}
查看我的日志,操作中的调试消息将'13'打印为正确的值。但是,插入数据库的值始终为“1”,这是日志中的代码段:
INSERT INTO `approvers` (`user_id`, `updated_at`, `created_at`, `group_id`) VALUES (1, '2011-07-13 04:58:51', '2011-07-13 04:58:51', 13)
为了进一步复杂化,为了调试,如果我将动作的第5行更改为:
@approver.user_id = 19
一切正常。
有谁能解释我做错了什么?
答案 0 :(得分:1)
group_id
不是你的问题,这很好。你的问题是:
"user_id"=>["18"]
所以params[:user_id]
实际上是一个数组,但你把它当成一个ID。然后,Rails中的某个人将该数组转换为1.当你这样说:
@approver.user_id = 19
一切正常,因为您将Fixnum分配给user_id
,这就是user_id
所期望的。
你需要找出为什么你得到一个数组user_id
,然后解决它。或者,弄清楚你应该对数组做什么,也许@approver.user_id = params[:user_id][0]
有意义,也许不是。