代码之家  ›  专栏  ›  技术社区  ›  me_

Rails活动记录:修改并保存联接结果中对象的子项?

  •  1
  • me_  · 技术社区  · 13 年前

    所以,这个:

    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作为“person.organization.name'”。

    2 回复  |  直到 13 年前
        1
  •  1
  •   jvnill    13 年前

    为了让你正在做的事情发挥作用,你必须设置 autosave 在您的 belongs_to :organization 协会

    belongs_to :organization, autosave: true
    

    或者直接调用组织上的save

    p.organization.name = 'Org Name'
    p.organization.save
    
        2
  •  0
  •   Benjamin Bouchet    13 年前

    您必须在Person类中声明关联,使用 属于_ 有一个 有(_M) has_many:通过 has_one:通过 或has_and_belongs_to_ many, Rails将自己进行连接,并将您的两个类链接在一起。

    让我把Rails指南的一部分粘贴到这里:

    通过活动记录关联,我们可以[..]告诉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