mar*_*cgg 3 ruby validation polymorphism ruby-on-rails
class Followup < ActiveRecord::Base
belongs_to :post
belongs_to :comment
end
Run Code Online (Sandbox Code Playgroud)
此模型只需要一个帖子或一个评论,但只需要两个中的一个.
这是我正在尝试做的rspec:
it "should be impossible to have both a comment and a post" do
followup = Followup.make
followup.comment = Comment.make
followup.should be_valid
followup.post = Post.make
followup.should_not be_valid
end
Run Code Online (Sandbox Code Playgroud)
我可以看到一堆解决方案来做到这一点,但这样做最优雅的方法是什么?
我认为你真正想要的是一个多态关联.
Ryan在Railscast#154中做了很好的解释.
class Followup < ActiveRecord::Base
belongs_to :followupable, :polymorphic => true
end
class Post < ActiveRecord::Base
has_many :followups, :as => :followupable
end
class Comment < ActiveRecord::Base
has_many :followups, :as => :followupable
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
515 次 |
| 最近记录: |