1

したがって、この:

p = Person
.joins('join organization o on o.id = organization_id')
.where('o.id' => 1)
.select('person.*')
.first!

p.name = 'hi!'
p.save!

期待どおりに機能し、人の名前を保存します。しかし、どうすればこれを行うことができますか:

p.organization.name = 'bye!'
p.save!

組織のフィールドをマッピングするための正しい投影法がわかりません (または可能であれば)。'*' と 'organization.name as "person.organization.name"' を試しました。

4

2 に答える 2

1

autosave実行していることを機能させるには、関連付けでオプションを true に設定する必要がありますbelongs_to :organization

belongs_to :organization, autosave: true

または、組織で保存を呼び出すだけです

p.organization.name = 'Org Name'
p.organization.save
于 2013-03-04T00:19:19.973 に答える
0

関連付けを Person クラスで宣言する必要があります。これには、begs_to has_one has_many has_many :through has_one :through または has_and_belongs_to_many を使用します。Rails はそれ自体で結合を行い、両方のクラスをリンクします。

ここに Rails ガイドのセクションを貼り付けます。

Active Record の関連付けを使用すると、[..] 2 つのモデル間に接続があることを Rails に伝えることができます。顧客と注文を設定するための改訂されたコードは次のとおりです。

class Customer < ActiveRecord::Base
  has_many :orders, :dependent => :destroy
end

class Order < ActiveRecord::Base
  belongs_to :customer
end

この変更により、特定の顧客向けの新しい注文の作成がより簡単になりました。

@order = @customer.orders.create(:order_date => Time.now)

ここで完全なガイドを読むことをお勧めします: http://guides.rubyonrails.org/association_basics.html

于 2013-03-04T00:15:45.727 に答える