2011-09-05 65 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