0
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
4

2 回答 2

1

您正在返回一个对象数组,统称为 a ActiveRecord::Relation。这是由于您的where搜索词。也许您想要以下内容:

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

where返回一个列表Products

find返回一个Product

于 2012-04-24T19:46:14.077 回答
0

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

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

class GsCollector < ActiveRecord::Base
  belongs_to :model
end

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

于 2012-04-24T19:25:54.417 回答