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
答案 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
真正的问题是你只能在一条记录上.models
。 Product.where
会返回几个 - 所以请使用Product.find_by_title("title").models