无法弄清楚has_many / belongs_to RAILS 4

时间:2015-05-17 18:53:29

标签: ruby-on-rails ruby-on-rails-4 database-migration has-many belongs-to

我的模特是:

class CarBrand < ActiveRecord::Base
        has_many :car_models
    end

class CarModel < ActiveRecord::Base
    belongs_to :car_brand
end

我的迁移是

    class CreateCarBrands < ActiveRecord::Migration
  def up
    create_table :car_brands do |t|
      t.string "brand", :limit => 20    
      t.timestamps null: false
    end
  end

  def down
    drop_table :car_brands
  end
end

    class CreateCarModels < ActiveRecord::Migration
   def up
    create_table :car_models do |t|
      t.references :car_brand
      t.string "model", :limit => 20      
      t.timestamps null: false
    end
    add_index :car_models, :car_brand_id
  end
  def down 
    drop_table :car_models
  end
end

我希望根据特定的汽车品牌获得车型,在数据库中我有两个记录,但是当我输入控制台时它会出错

somecar = CarBrand.where(:brand => 'Toyota')
somecar.car_models

因此它不会返回我的丰田模型,但我将它们放在数据库中!!!

2 个答案:

答案 0 :(得分:1)

somecar = CarBrand.where(:brand => 'Toyota')返回一个活动记录关系#<ActiveRecord::Relation [#<.....,主要观点是它是一个集合。您必须遍历集合中的每个项目。

some_cars = CarBrand.where(:brand => 'Toyota') some_cars.each do |car| puts car.car_model end

或第一项some_cars.first.car_model

注意我将some_car更改为some_cars,变量名称确实很重要,但更容易看出它是一个集合。请注意,我在每个项目上调用.car_model(而不是car_models),这非常重要。

答案 1 :(得分:0)

尝试这样: -

somecar = CarBrand.where(:brand => 'Toyota')
somecar.first.car_models

由于CarBrand.where(:brand => 'Toyota')返回一个数组。

OR

尝试这样: -

somecar = CarBrand.find_by brand: 'Toyota'
somecar.car_models

CarBrand.find_by brand: 'Toyota'将获取第一条匹配记录。