Rails 4关联:帮助设置数据库

时间:2016-05-02 13:55:04

标签: ruby-on-rails ruby-on-rails-4 nested-attributes has-many-through

我需要一些Rails 4协会的帮助。我有以下4个型号:

class User < ActiveRecord::Base
    has_many :check_ins
    has_many :weigh_ins, :through => :check_ins
    has_many :repositionings, :through => :check_ins
end

class CheckIn < ActiveRecord::Base
    belongs_to :user
    has_one :weigh_in
    has_one :repositioning
end

class Repositioning < ActiveRecord::Base
    # belongs_to :user
    belongs_to :check_in
end

class WeighIn < ActiveRecord::Base
    # belongs_to :user
    belongs_to :check_in
end

问题:如果我以这种方式设置,我将如何单独输入repositioningsweigh_ins,但仍然可以通过单次检入链接它们?

2 个答案:

答案 0 :(得分:1)

您必须保留其他关联ID之一才能使其正常工作。

例如,让我们说:

  1. 您已创建了CheckIn。
  2. 您现在为该签入添加重新定位。
  3. 存储重新定位对象的ID
  4. 添加WeighIn对象时,您只需引用正确的CheckIn记录:correct_checkin_record = CheckIn.where(repositioning: the_repositioning_id)
  5. 然后,您可以将WeighIn对象添加到该特定记录。
  6. 另一种(更简单的)方法是直接通过用户访问CheckIn:correct_checkin_record = @user.checkin - 每次都会引入正确的CheckIn。

    我已经包含了两个选项,可以帮助确切地了解关系中发生的事情。

答案 1 :(得分:0)

您是否希望用户在不同的页面上输入weigh_ins和重新定位?
将称重和重新定位单独输入但仍然是单次登记的一部分,这种设置很好。
它只需要获取相同的check_in对象并建立与该对象的关联,这可以通过传入check_in ID参数通过控制器完成并执行CheckIn.find(params[:id])