1

私はモデルShowとモデルを持っていArtistます。Showからへの参照が必要ですArtistが、その逆は必要ありません。

aShowには an がArtistあり、それだけです。これは私がしました:

class Artist < ActiveRecord::Base
end

class Show < ActiveRecord::Base
    has_one :artist
end

しかし、うまくいきません。私がするたびに:

a_show.artist = an_artist

割り当てません。また、私はこれを取得します:

非推奨警告: 属性 attr_writer` などを作成しようとしていますshow_id'. Writing arbitrary attributes on a model is deprecated. Please just use((irb):3 の irb_binding から呼び出されます)

私のデータベースには、artist_idin showstable という typeという列がありますInteger

4

3 に答える 3

2

整数型のショー テーブルに artist_id という列があります。

この場合、クラス内のリレーションは代わりにあるShow必要があります(は常に外部キーを含むクラスにあります)。belongs_tohas_onebelongs_to

于 2012-12-25T17:54:39.143 に答える
0

この種の混乱については、Rails ガイドの「begs_to と has_one の選択」セクションを参照してください。

2 つのモデル間に 1 対 1 の関係を設定する場合は、belongs_to を一方に追加し、has_one を他方に追加する必要があります。どちらがどれであるかどうやってわかりますか?

違いは、外部キーを配置する場所にありますが (belongs_to アソシエーションを宣言するクラスのテーブルに配置されます)、データの実際の意味についても考えておく必要があります。has_one 関係は、何かの 1 つがあなたのものであること、つまり、何かがあなたを指し示していることを示します。たとえば、取引先が仕入先を所有しているというよりも、仕入先が取引先を所有していると言う方が理にかなっています。これは、正しい関係が次のようなものであることを示唆しています。

class Supplier < ActiveRecord::Base
  has_one :account
end

class Account < ActiveRecord::Base
  belongs_to :supplier
end

対応する移行は次のようになります。

class CreateSuppliers < ActiveRecord::Migration
  def change
    create_table :suppliers do |t|
      t.string  :name
      t.timestamps
    end

    create_table :accounts do |t|
      t.integer :supplier_id
      t.string  :account_number
      t.timestamps
    end
  end
end
于 2014-02-26T02:21:58.647 に答える
0

この協会の基本を見てください

ここに画像の説明を入力

しかし、あなたが望むものを達成できるようにするためには、belongs_to が必要です。

ここに画像の説明を入力

于 2012-12-25T17:57:37.060 に答える