0

我有两个简单的模型:

class Idea << ActiveRecord::Base
  has_many :tasks

  # for nesting....
  accepts_nested_attributes_for for :tasks
  attribute_accessible :tasks_attributes
end

class Task << ActiveRecord::Base
  belongs_to :idea
  validates_presence_of :idea # this line is causing pain
end

我发送以下 JSON 来创建我的 IdeasController:

{
    "description":"Test test test",
    "tasks":[{"description":"test test test"}]
}

...我得到了验证错误。一旦我删除验证,一切都会好起来的!

有什么建议么?

4

1 回答 1

1

定义反向关联可以帮助:

class Idea << ActiveRecord::Base
  has_many :tasks, inverse_of: :idea # here...
  accepts_nested_attributes_for :tasks
  attribute_accessible :tasks_attributes
end

class Task << ActiveRecord::Base
  belongs_to :idea, inverse_of: :tasks # ... and here
  validates_presence_of :idea 
end

验证失败的原因是,在此修复之前,关联是单向的:当您尝试到达任务的idea时,而不是使用用于从其想法到达任务的关联代理,它会创建另一个不知道的关联代理这个想法的存在(对不起,这有点难以解释)。

另外,请务必使用validates_presence_of :ideaand NOT validates_presence_of :idea_id。此外,您应该tasks_attributes在 json 中使用,而不仅仅是tasks.

于 2013-04-11T07:06:06.357 回答