2013-02-26 114 views
1

我有一個屬於關係的模型。Ruby On Rails Model沒有方法

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.where({:ASIN => ASIN})第一

 # 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.first(:條件=> {:名稱=>名稱})

當我打電話,我得到一個錯誤說undefined method 'first' for Product:Class 我試圖這樣做Product.new,我不能訪問任何屬性。我得到這個每個人undefined method 'request_id=' for #<Product:0x007ffce89aa7f8>

我已經能夠保存請求對象。我在做什麼產品有問題?

編輯:

所以事實證明有正被進口,這不是一個ActiveRecord類的舊產品的數據類型。它正在使用,而不是我的Product :: ActiveRecord。我刪除了這個導入,這很好。抱歉浪費了大家的時間。

不知道這個問題該怎麼處理。

+0

'product = Product.where(:conditions => {:name => name})first' – 2013-02-26 01:50:41

+0

你說你試圖「創建一個新產品」,但你打電話給'.first',它是用於選擇「產品」。如果你想用一個給定的名字來初始化一個新的Product,你應該使用下面的代碼:'product = Product.new(:name => name)' – 2013-02-26 01:52:00

+0

我試圖創建一個新產品(空的)與Product.new。這不起作用。我嘗試了Product.where,並得到了這個未定義的方法'Where'for Product:Class – smokingoyster 2013-02-26 01:57:00

回答

1

首先檢查你的產品類是通過鍵入正確設置:

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表中。

如果這些建議都不起作用,請檢查以確保項目中不存在具有相同名稱的現有類。這會導致各種錯誤,並會解釋某些未找到的方法。

+0

控制檯將產品模型罰款。如果我試圖將任何參數傳遞給Product.new,我會得到這個「錯誤數量的參數(1代表0)' – smokingoyster 2013-02-26 03:08:44

+0

您能從控制檯打印出您正在做什麼嗎? – tomciopp 2013-02-26 03:10:54

+0

我在控制器中運行產品創建代碼。我可以使用我在控制器中使用的確切代碼在控制檯中創建和保存產品。但是在控制器中,每次嘗試使用Product類時都會發生錯誤。 – smokingoyster 2013-02-26 03:23:44

2

您的Product類是ActiveRecord :: Base類嗎?你可以通過運行找到:

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

如果這返回false,它會從其他地方加載類。

+0

我編輯了上面的問題。不知道是否需要刪除它。問題恰恰在於,我有一箇舊的進口帶來不同的產品類別。 – smokingoyster 2013-03-04 15:13:03