7

モデルのペアがあるとします。

class Club < ActiveRecord:Base
  has_many :members, autosave: true
end

class Member < ActiveRecord:Base
  belongs_to :club
end

クラブを救うまで、まだ新しいメンバーを維持することなく、クラブに新しいメンバーを追加できるようにしたいと思います。どうすればこれを行うことができますか?

クラブにメンバーを追加するために使用<<すると、メンバーが自動的に保存されるため、希望どおりに機能しません。

4

3 に答える 3

3

has_many のドキュメントによると、「シャベル」メソッドcollection<<(object, …)

外部キーをコレクションの主キーに設定して、1 つ以上のオブジェクトをコレクションに追加します。この操作は、親オブジェクトが新しいレコードでない限り、親オブジェクトの保存または更新の呼び出しを待たずに更新 SQL を即座に起動することに注意してください。

まだデータベースに保存せずに新しいレコードを作成したい場合は、collection.build.

属性でインスタンス化され、外部キーを介してこのオブジェクトにリンクされているが、まだ保存されていないコレクション型の 1 つ以上の新しいオブジェクトを返します。

Club と Member をモデル例として使用:

club = Club.find(params[:id])
club.members.build(member_attributes) # member is not saved
club.save # saves club and members
于 2016-01-26T22:29:33.220 に答える
0

Member モデルの「temporar_id」という属性を作成します。

メンバーは、クラブの ID を持つ temporary_id で始まりますが、まだクラブに関連付けられていません。

club_idが実行nilされるまでaccept_membersです。

class Club < ActiveRecord:Base
  has_many :members, autosave: true

  # Accepts all new member, just as an example
  # Used like this in controller
  # @club = Club.find(params[:id])
  # @club.accept_members
  def accept_members
    User.find_all_by_temporary(true).each do |new_member|
      new_member.tempoary = false
      new_member.club_id = id 
    end
  end
end

class Member < ActiveRecord:Base
  belongs_to :temporary
  belongs_to :club
end
于 2012-10-15T19:24:38.883 に答える
-1

これはどうですか

def add_members
  @club = Club.find(params[:id])
  @members = #From_where_ever_you_want
  @members.each do |member|
  @club << member
end
end

電話するまで

@club.save

新しいメンバーはメモリにのみ保存されます。

于 2012-10-15T18:32:49.647 に答える