0

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

    class Event < ActiveRecord::Base
      has_many :tips
    end

    class Tip < ActiveRecord::Base
    end

ヒントの説明はVARCHAR(140)、MySQL データベース内の . 同じ値を持つ多数の文字列を保存することを避けるために正規化を使用したいのですが、モデルに値を追加belongs_to :eventすると、値が多くの重複するヒントにつながります。Tipevent_id

tip_id <---> tip_description手動でマッピングを管理せずに正規化の利点を得るにはどうすればよいですか?

4

1 に答える 1

2

テーブルにエントリが繰り返されるのを避けたい場合は、次を使用しますhas_and_belongs_to_many

class Event < ActiveRecord::Base
  has_and_belongs_to_many :tips
end

class Tip < ActiveRecord::Base
  has_and_belongs_to_many :events
end

作成する移行events_tips:

class CreateEventsTips < ActiveRecord::Migration
  def change
    create_table :events_tips, :id => false do |t|
      t.integer :event_id
      t.integer :tip_id
    end
  end
end

コントローラーで:

tip = Tip.find_or_create_by_tip_description(params[:tip][:description])
Event.find_by_id(params[:id]).tips << tip
于 2013-02-09T04:16:39.033 に答える