Rails:无法设置子模型的任何属性

时间:2010-05-07 17:03:34

标签: ruby-on-rails ruby

我在使用指定属性实例化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>


<小时/> 更新#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

2 个答案:

答案 0 :(得分:2)

我在本地设置中创建了模型和表格。我没有遇到任何错误。必须有一些类名冲突,或者你有一些before_save过滤器/观察者重置值。

注意

我会将模型名称更改为更具体。使用ListListItem

之类的名称很容易遇到类名冲突

答案 1 :(得分:0)

嗯,

当验证无法正常工作时,我遇到了类似的问题。尝试

ListItem.create!(:id => 17, :list_id => 20, :name => "Test Item")

如果模型无效,这可以为您提供更直接的反馈。