0

私は 2 つの ActiveRecord モデルを持っていAますBA has_many :BB belongs_to :A。当然、コラムBがありa_idます。

がたくさんありA、新しい を作成するたびに、特定の条件が満たさ Bれる場合に関連付けたいと思います。A

現在、可能性のある を取得し、 1 つを次のようAにリンクしています。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

これは臭そうです。2 つのモデルをリンクするより良い方法はありますか? 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

If B has a belongs_to relationship with A, then the way you created your B records is incorrect. You got to use the build method to create dependent records.

For example:

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

Now, with that, retrieving all B records for a particular set of A records becomes quite straightforward:

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 に答える