ActiveModel关联和rails控制台

时间:2015-11-26 23:58:25

标签: ruby-on-rails activemodel

所以我创建了两个模型:

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 console获取数据如下:

> 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控制台中执行此操作? 使用生成器定义这种关系的更好方法是什么?

2 个答案:

答案 0 :(得分:2)

您需要按照以下方式构建关联:

  1. user_id表中添加rental_units作为整数列

  2. has_many :rental_units型号

  3. 中添加User

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

    <强>更新

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

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

    在控制台

    中运行rake db:migrate

答案 1 :(得分:2)

你需要

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

    rails g migration AddUserToRentalUnits user:references
    
  2. 或手动创建迁移

        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
    

    然后在控制台中测试,你应该可以关联它。

    希望这有帮助!