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 に答える