在Rails中无法正确保存表单参数

时间:2011-07-13 05:11:20

标签: ruby-on-rails parameters

所以,我有这个动作是为了保存一个模型:

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

一切正常。

有谁能解释我做错了什么?

1 个答案:

答案 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]有意义,也许不是。

相关问题