Ruby on Rails将表单变量传递给控制器

时间:2011-12-15 03:14:19

标签: file-upload ruby-on-rails-3.1 copy carrierwave duplicate-data

提交表单时,会传递这些参数。

Parameters:

{"utf8"=>"✓",
 "_method"=>"copyfile",
 "authenticity_token"=>"yM2v0dJysGuw7zRIhuhY7xHMywuDRjfBqzpJc0/LCqE=",
 "redocument"=>{"odocument_id"=>"14"},
 "commit"=>"Update Redocument",
 "method"=>"copyfile",
 "id"=>"66"}

我想在控制器中传递的参数中引用odocument_id

在我的控制器中,我有这个

  def copyfile
    @oldfile = Redocument.find(params[:id])
    @newfile = Redocument.find(params[:id]).dup

    @newfile.odocument_id = params[:odocument_id]
    if @newfile.save!
      dupfile(@oldfile.redocument.to_s, @newfile.redocument.to_s)
      flash[:notice] = 'Record was successfully cloned.'
    else
      flash[:notice] = 'Record ERROR: Item can\'t be cloned.'
    end

    redirect_to(:back)
  end

我已成功在新ID文件夹中创建文件。但是,我正在对我的目录结构进行分类,如odocument_id / redocument_id /。在调用函数dupfile创建文件夹和副本之前,我无法更新odocument_id。当我看到@newfile上传到MySQL时,它会创建一个NULL值。

1 个答案:

答案 0 :(得分:1)

您没有正确访问:odocument_id参数。正如您在获得的参数"redocument"=>{"odocument_id"=>"14"}中看到的那样,“odocument_id”位于“redocument”参数内。所以你需要这样做:

@newfile.odocument_id = params[:redocument][:odocument_id]

您正在执行的params[:odocument_id]不存在,因此您获得了空值。

另外,你可以做到

@newfile = @oldfile.dup

并且无需再次找到该文件。