我有一个非常简单的形式,脚手架控制器动作。相关的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
我真的不知道这样的基本事情是如何失败的。请有人帮忙吗?
提前感谢一大堆。
答案 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。我不知道你是否在使用它。如果不这样做,请将“类型”更改为其他名称。