ActiveModel 关联和 rails 控制台

ActiveModel association and rails console

所以我创建了两个模型:

rails g scaffold user name email

rails g scaffold rental_unit address rooms:integer bathrooms:integer price_cents:integer

并定义关联如下:

class RentalUnit < ActiveRecord::Base
  belongs_to :user
end

现在,我想使用 rails 控制台进行如下数据处理:

> user = User.new
> user.name = "John Doe"
> user.email = "test@example.com"
> user.save!    
> unit = RentalUnit.new
> unit.address = "abc street"   
> unit.rooms = 4    
> unit.bathrooms = 2

但我无法使用以下方法关联以上记录:

unit.user = user

如何在 rails 控制台中执行此操作? 使用生成器定义这种关系的更好方法是什么?

您需要建立如下关联:

  1. rental_units table

  2. 中添加 user_id 作为整数列
  3. 在您的 User 模型中添加 has_many :rental_units

然后你可以使用unit.user = user建立关系

更新:

要在数据库中添加列,您需要在 /db/migrate 中添加一个文件,例如:

class AddUserIdToRentalUnits < ActiveRecord::Migration
  def change
    add_column :rental_units, :user_id, :integer
  end
end

和运行 rake db:migrate 在控制台

你需要

  1. 添加对rental_unit的引用:使用rails命令生成迁移

    rails g migration AddUserToRentalUnits user:references
    

或手动创建迁移

    class AddUserToRentalUnits < ActiveRecord::Migration
        def change
            add_reference :rental_units, :user, index: true
        end
    end

    rake db:migrate

2。在用户模型中添加关联

    class User < ActiveRecord::Base
        has_many :rental_units
    end

然后在console中测试,应该可以关联了

希望对您有所帮助!