0

我有两个 ActiveRecord 模型,AB. A has_many :BB belongs_to :A。自然Ba_id专栏。

我有一堆A's ,每次我创建一个新的 's 时B,我都想将它与Aif 某些条件成立相关联。

目前,我正在检索可能A的 's 并将一个链接到一个B这样的:

class B < ActiveRecord::Base

    attr_accessible :a_id
    belongs_to :a

    def link_to_a
        possible_as = A.where(some: conditions)
        self.a = possible_as.find_by_other-foreign-key_id(self.other_id) if possible_as != nil
        # Then I have to perform an operation on the b's a such as:
        self.a.linked_to_b_at = Time.now if self.a != nil
    end
end

这个好像很臭 有没有更好的方法来链接这两个模型?我认为明确的has_many和关系会对我有所帮助。belongs_to我肯定错过了什么。

4

2 回答 2

1

添加一个创建关联的 after_create 过滤器

class B < ActiveRecord::Base

  attr_accessible :a_id
  belongs_to :a
  after_create :link_to_a

  def link_to_a
    update_attribute(:a_id, find_a )
  end

  def find_a #returns id of a
    your logic to find a
    ...
   end
end

然后像往常一样创建模型 B。看看这个,它有完整的例子来管理这种类型的关联。

http://guides.rubyonrails.org/getting_started.html#adding-a-second-model

于 2012-12-10T07:43:30.077 回答
1

如果 B 与 A 有belongs_to 关系,那么您创建B 记录的方式不正确。您必须使用该build方法来创建依赖记录。

例如:

def create_b_records
 a = A.find(some_id)
 a.build_b(new_record_attributes)
 a.save 
end

现在,有了这个,检索一组特定 A 记录的所有 B 记录变得非常简单:

possible_as = A.where(some_condition)
possible_as.each do |possible_a|
 possible_a.b #Do whatever you want to do with these B records
end
于 2012-12-10T08:01:58.087 回答