1

私は関係に属しているモデルを持っています。

class Product < ActiveRecord::Base
  attr_accessible :name, :price, :request_id, :url

  # Relationships
  belongs_to :request

end

class Request < ActiveRecord::Base
  attr_accessible :category, :keyword

  # Relationships
  has_many :products

end

これは私のコントローラー関数 product = Product.where({ :asin => asin }).first のコードです。

     # See if the product exists
     begin
         #This throws a method not found error for where
        product = Product.where({ :name => name }).first

     rescue 
        Product.new
             # This throws a method not found error for request_id
        product.request_id = request.id
        product.save
     end

次のような新しい製品オブジェクトを作成しようとしています product = Product.first(:conditions => { :name => name })

undefined method 'first' for Product:Class それを呼び出すと、Product.new を実行しようとしたときに属性にアクセスできないというエラーが表示されます。私はこれをすべての人に手に入れますundefined method 'request_id=' for #<Product:0x007ffce89aa7f8>

リクエスト オブジェクトを保存できました。製品の何が間違っていますか?

編集:

そのため、ActiveRecord クラスではない古い Product データ型がインポートされていたことが判明しました。私のProduct::ActiveRecordの代わりにそれを使用していました。そのインポートを削除しました。みんなの時間を無駄にしてごめんなさい。

この質問をどうするかについて、適切なプロトコルがここにあるかどうかわかりません。

4

2 に答える 2

2

あなたのProductクラスは ActiveRecord::Base クラスですか? 次を実行して確認できます。

Product.ancestors.include?(ActiveRecord::Base)

これが false を返す場合、別の場所からロードされたクラスを取得しています。

于 2013-03-02T15:04:28.950 に答える
1

まず、次のように入力して、Product クラスが正しく設定されていることを確認します。

rails c
# after console has loaded
Product

これが正しいと思われる場合は、以下を呼び出して製品のインスタンス化を試みます。

# Create a new product
product = Product.new(name: "first product", price: 100, url: "http://www.example.com")
# Persist this object to the database
product.save

属性が欠落している場合は、別の移行を実行して、それらを Product テーブルに追加します。

これらの提案のいずれも機能しない場合は、プロジェクトに同じ名前の既存のクラスがないことを確認してください。これにより、あらゆる種類のエラーが発生し、特定のメソッドが見つからないことが説明されます。

于 2013-02-26T02:59:38.940 に答える