我有两个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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top