【问题标题】:Two Tables Serving as one Model in RailsRails 中的两个表作为一个模型
【发布时间】:2010-06-18 02:17:13
【问题描述】:
是否可以在 Rails 中设置依赖于两个表连接的模型?这意味着要找到/更新/销毁模型记录,两个数据库表中的两条记录都需要在连接中链接在一起。该模型将只是包装在一起的两个表的所有列,然后可以用于表单等。这样,当模型被创建/更新时,它只是一个应用于模型的表单变量散列?
这在 Rails 2 或 3 中可行吗?
【问题讨论】:
标签:
ruby-on-rails
database
database-design
activerecord
join
【解决方案1】:
据我所知,在 Rails 中不可能完全按照您的要求完成,但是您可以使用回调和 has_one 关联有效地完成您想要通过第二个模型完成的任务,例如实例:
class Widget < ActiveRecord::Base
has_one :thingy
before_save :save_thingy_object
def save_thingy_object
self.thingy = Thingy.new({ :attr1 => 'some', :attr2 => 'thing' })
end
end
class Thingy < ActiveRecord::Base
belongs_to :widget
end
【解决方案2】:
多表继承目前在 Ruby on Rails 中没有开箱即用的解决方案。
虽然我建议尝试做与上述具有关系的模型类似的事情,然后基本上滥用委托或手动代理来伪造关系属性以显示为模型的真实属性。