不建议在模型上编写任意属性。 (模型上有多个belongs_to)

时间:2012-09-12 19:46:47

标签: ruby-on-rails-3 activerecord

我与同一模型有多个belongs_to关系。在两个用户之间建模消息,如下所示(在Message模型中):

  belongs_to :to, :class_name => 'User', :foreign_key => 'to_id'
  belongs_to :from, :class_name => 'User', :foreign_key => 'from_id'

  attr_accessible :to, :from # ...

相应的has_many次调用位于User模型中。除了以下弃用警告(from_idto_id)之外,一切都在我需要的规范和控制台中工作:

DEPRECATION WARNING: You're trying to create an attribute `from_id'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` 

相关规范如下:

  it "can associate users" do
    User.delete(:all)
    ufrom = FactoryGirl.create(:DrKevorkian)
    ufrom.save!
    uto = FactoryGirl.create(:JohnSmith)
    uto.save!

    m = Message.new
    m.from = ufrom   # <-- Warning here
    m.to = uto       # <-- Warning here
    m.save

    m.from.id.should == ufrom.id
    m.to.id.should == uto.id

  end

在我看来,由于belongs_to关联,警告正在发生 - 是否有更清洁/更好的方法来做到这一点?

非常感谢。

1 个答案:

答案 0 :(得分:53)

我的经验是,如果您在更改架构后忘记运行rake db:migraterake db:test:prepare,则会收到此警告。