我在使用指定属性实例化ListItem
对象时遇到问题。出于某种原因,即使我指定了值,所有属性也都设置为nil
。但是,如果我指定List
的属性,则会保留其值。
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>
我认为id
是唯一不保留其价值的属性,但意识到将ListItem
的任何属性设置为nil
。
我将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
答案 0 :(得分:2)
我在本地设置中创建了模型和表格。我没有遇到任何错误。必须有一些类名冲突,或者你有一些before_save过滤器/观察者重置值。
注意
我会将模型名称更改为更具体。使用List
和ListItem
答案 1 :(得分:0)
嗯,
当验证无法正常工作时,我遇到了类似的问题。尝试
ListItem.create!(:id => 17, :list_id => 20, :name => "Test Item")
如果模型无效,这可以为您提供更直接的反馈。