使用Email belongs_to两把钥匙
-
05-07-2019 - |
题
我有两个Email模型与一hasMany/belongsTo协会:
class User < ActiveRecord::Base
has_many :letters
end
class Letter < ActiveRecord::Base
belongs_to :user
end
用户模型具有revision_number属性,我谨范围的belongs_to关联,因此该信是关联到一个用户通过这两个用户。id和用户。revision_number.
我试图使用条件的关键作为记录在API文档:
class Letter < ActiveRecord::Base
belongs_to :user, :conditions => "revision_number = #{client_revision}"
end
但这种试图呼叫客户机-修订关于信类,不实例的信。会有人指给我正确的方向范围的belongs_to协会是否正确?
我在使用 作为revisable 插件版本的用户模型。
解决方案 2
终于想通了我所需要的是什么样的组合键,其轨Email不支持。该解决方案(现在至少)是写定制的客户访问的信,以支持组合键(id和revision_number):
class Letter < ActiveRecord::Base
def client
Client.find_by_id(self.client_id).try(:find_revision, self.client_revision)
end
def client=(c)
self.client_id = c.id
self.client_revision = c.revision_number
end
end
class Client < ActiveRecord::Base
acts_as_revisable
has_many :letters
end
与此设置客户#1.信件将检索一系列的两封信函,但信#2.客户将检索客户#1r2,虽然信#2.客户将检索客户#1r4:
Client id: 1 1 1 1 1 1
rev_number: 1 2 3 4 5 6
Letter id: 1 2
client_id: 1 1
client_revision: 2 5
仍然不知道如果这是最好的处理这个问题的方法,但它似乎工作。
其他提示
我有一个很难理解为什么你想要范围 belongs_to
以这种方式。正确的我,如果我错了,但它可能更好地做这样的事情。我假设你想要某种形式的版本控制系统:
class User < ActiveRecord::Base
has_many :letters
end
class Letter < ActiveRecord::Base
has_many :revisions, :class_name => "LetterVersion"
belongs_to :current, :class_name => "LetterVersion"
end
class LetterVersion < ActiveRecord::Base
belongs_to :letter
end
不隶属于 StackOverflow