我遇到了一个实例化具有指定属性的ListItem
对象的问题。由于某些原因,即使我指定了值,所有属性都设置为nil
。但是,如果我指定List
的属性,则它们将保留其值。Rails:无法设置子模型的任何属性
属性的List
保留其值:
>> list = List.new(:id => 20, :name => "Test List")
=> #<List id: 20, name: "Test List">
属性为ListItem
不保留其值:
>> list_item = ListItem.new(:id => 17, :list_id => 20, :name => "Test Item")
=> #<ListItem id: nil, list_id: nil, name: nil>
更新#1:
我认为id
是不保留其值的唯一属性,但意识到将ListItem
的任何属性设置为nil
。
更新#2:
我添加validates_associated :list_items
到List
类减轻关于name
属性是空白错误。
但是,我仍然不能明确地将id
分配给新的ListItem
。
list.rb:
class List < ActiveRecord::Base
has_many :list_items, :dependent => :destroy
accepts_nested_attributes_for :list_items,
:reject_if => lambda { |a| a[:name].blank? },
:allow_destroy => true
end
list_item.rb:
class ListItem < ActiveRecord::Base
belongs_to :list
validates_presence_of :name
end
schema.rb
ActiveRecord::Schema.define(:version => 20100506144717) do
create_table "list_items", :force => true do |t|
t.integer "list_id"
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "lists", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
end
我收到以下错误消息,当我执行上面的语句运行的类名冲突:“的ActiveRecord :: RecordInvalid:验证失败:名称不能为空” 我不知道为什么它的名称属性显然不是空白时抛出此错误。 – 2010-05-07 18:01:55
这可能是你指定':id'。试试看看 – Ceilingfish 2010-05-07 18:06:04
我把':id'取出来了,而且我仍然得到:'ActiveRecord :: RecordInvalid:验证失败:名称不能为空'。我很困惑。 – 2010-05-07 18:10:38