params []元素未在create action中传递给新对象

时间:2011-06-02 11:49:50

标签: ruby-on-rails

我有一个非常简单的形式,脚手架控制器动作。相关的DB模式如下:

  create_table "uploads", :force => true do |t|
    t.string   "name"
    t.string   "location"
    t.string   "type"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "filename" 
  end

提交表单时,params包含以下内容(查看特定类型参数):

{"utf8"=>"✓",
 "authenticity_token"=>"NGV4rS/tZDWg2ZdMLpiSbTJQBDmMyjfYyZqZ6GX/7Kc=",
 "upload"=>{"name"=>"AEGFAEF",
 "type"=>"Sales",
 "file"=>#<ActionDispatch::Http::UploadedFile:0x4dff958 @original_filename="Google.pdf",
 @content_type="application/pdf",
 @headers="Content-Disposition: form-data; name=\"upload[file]\"; filename=\"Google.pdf\"\r\nContent-Type: application/pdf\r\n",
 @tempfile=#<File:C:/Users/kaya/AppData/Local/Temp/RackMultipart20110602-2876-1wyskk3>>},
 "commit"=>"Create Upload"}

UploadsController的create动作中的第一个命令是

@upload = Upload.new(params[:upload])

就在这行之后我有

@upload.type = nil

我真的不知道这样的基本事情是如何失败的。请有人帮忙吗?

提前感谢一大堆。

2 个答案:

答案 0 :(得分:1)

在rails type中是一个MagicFieldName,它保留用于表继承。由于在您的情况下Upload不会继承任何内容,因此查询对象上的type将返回nil。

众所周知,使用MagicFieldNames作为列名会导致很多麻烦。你可以检查一下 http://oldwiki.rubyonrails.org/rails/pages/MagicFieldNames获取完整列表。

“Rails将约定优于配置。在表格设计领域也是如此,其中给定特定名称的字段会自动获得某些行为。

Active Record允许继承,方法是将类的名称存储在默认名为“type”的列中(可以通过覆盖Base.inheritance_column来更改)。“

答案 1 :(得分:0)

列'type'保留给STI。我不知道你是否在使用它。如果不这样做,请将“类型”更改为其他名称。