10

私は自分のアプリで多くの関係を持っています:

ショーには多くのバンドがいます =>ラインナップ

バンドは :name によって一意です

class Show < ActiveRecord::Base
attr_accessible :city_id, :title, :dateonly, :timeonly, :image, :canceled, :venue_attributes, :bands_attributes

  belongs_to :city
  belongs_to :venue
  has_many :lineups
  has_many :bands, through: :lineups
  has_and_belongs_to_many :users
end


class Lineup < ActiveRecord::Base
  belongs_to :show
  belongs_to :band


end


class Band < ActiveRecord::Base
  attr_accessible :name, :website, :country, :state
  has_many :lineups
  has_many :shows, through: :lineups

  validates :name, presence: true
  validates_uniqueness_of :name
  before_save :titleize_name

  private
    def titleize_name
      self.name = self.name.titleize
    end

end

新しいバンドは次のように作成されます。

(s1 という名前のショー レコードが既に保存されているとします)

> s1.bands.new(name: "Wet Food")
> s1.save

現在、これは「Wet Food」という名前のバンドがまだ存在しない場合にのみ保存されます

同じ名前のバンドが存在する場合に既存のバンドを使用できるように、この関係で Band.find_or_create を実行するのに最適な場所はどのモデルですか?

4

1 に答える 1

19

これは一般に、Controller(またはおそらくサービス オブジェクト) に含まれる呼び出しのタイプですが、 には含まれませんModel。それは、アプリで達成しようとしている特定のユーザー フローに大きく依存します。基本的に、すでに を使用している場合はs1.bands.new、代わりにこれを使用できます。

s1.bands.where(name: 'Wet Food').first_or_create
于 2013-10-19T23:35:18.813 に答える