为什么rails找不到我的表关系?

时间:2012-04-24 19:22:31

标签: ruby-on-rails ruby-on-rails-3.2

class Product < ActiveRecord::Base
  has_many :models, :dependent => :destroy, :order => 'display, title'

class Model < ActiveRecord::Base
  belongs_to :product

class GsCollector < ActiveRecord::Base
  belongs_to :model

为什么我不能在GsCollector的表单中执行以下操作?:

  <p>
    Model:<br />
    <%= collection_select :gs_collector, :model_id, Product.where("title = 'Some Title'").models.all, :id, :title %>
  </p>

我收到错误:

undefined method `models' for #<ActiveRecord::Relation:0x007fef0ac09350>

关系不应该提供模型方法吗?在控制台中,这可以工作:

p = Product.find(4).models

但这不是:

p = Product.where("title = 'some title'").models

不确定区别是什么......

这是我的架构:

  create_table "gs_collectors", :force => true do |t|
    t.integer  "project_id"
    t.integer  "model_id"
    t.integer  "quantity",   :default => 1
    t.string   "housing",    :default => "Base Unit"
    t.string   "hopper"
    t.string   "controller"
    t.boolean  "overbags",   :default => false
    t.datetime "created_at",                          :null => false
    t.datetime "updated_at",                          :null => false
  end

  create_table "models", :force => true do |t|
    t.string   "title"
    t.integer  "product_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "display"
  end


  create_table "products", :force => true do |t|
    t.string   "title"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

2 个答案:

答案 0 :(得分:1)

您正在返回一组对象,统称为ActiveRecord::Relation。这是由于您的where搜索字词所致。也许你想要的东西如下:

p = Product.find_by_title('some title').models

where会返回Products

列表

find会返回一个Product

答案 1 :(得分:0)

您需要在两种方式中定义Model和GsCollector之间的关系。你忘记了模型中的部分:

class Model < ActiveRecord::Base
  belongs_to :product
  has_many :gs_collectors
end

class GsCollector < ActiveRecord::Base
  belongs_to :model
end

真正的问题是你只能在一条记录上.modelsProduct.where会返回几个 - 所以请使用Product.find_by_title("title").models