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 类中声明关联,使用 belongs_to has_one has_many has_many :through has_one :through 或 has_and_belongs_to_many,Rails 将自行连接并将您的两个类链接在一起。

让我在这里粘贴一段 Rails 指南:

通过 Active Record 关联,我们可以 [..] 告诉 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 回答