2011-09-05 41 views
0

我想將用戶與其創建的產品關聯,但我遇到了問題。我的模型如下所示。Active Record Association產品belongs_to用戶

class Product < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :user 

    def userid 
    @user_id = @product.user 
    end 
end 

class User < ActiveRecord::Base 
    has_many :products, :foreign_key => 'user_id' 
end 

我得到一個nil object有以下幾種觀點<%= @product.userid %>

回答

2
  1. 你不需要Product#userid方法都沒有。
  2. Product#userid方法中,您可以參考@product。這是Product上的一個product實例變量。你不需要一個實例變量來引用它本身的對象,你只需使用self,但它大部分時間都是隱含的。你只需要在模棱兩可的情況下(如user_id = 1,它可以是self.user_id=(1)或分配本地user_id變量到1)。
  3. 您不需要在User模型上指定foreign_key,因爲您遵循慣例。

所以下面應該爲你工作得很好:

class Product < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :products 
end 

@product = Product.first 
@product.user #=> <User :foo => 'bar'> 

@user = User.first 
@user.products.create :some_attribute => 'some value' 
+0

我想起來了,當我使用的哈希#\t \t \t <%= @product = Product.first%> – patrick

+0

爲什麼會你在做那個?您應該在控制器中獲取數據,而不是您的視圖。雖然輸出應該看起來像散列,但它實際上並不是散列。調用'@ product.class',你應該返回'Product'。 – coreyward

+0

謝謝,我終於明白了一切。我需要在我的產品表中創建一個user_id列,並讓Active Record處理關係。 – patrick