Active Record Association产品belongs_to User

时间:2011-09-05 22:14:30

标签: ruby-on-rails

我正在尝试将用户与其创建的产品相关联,但我遇到了问题。我的模型如下所示。

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 %>

1 个答案:

答案 0 :(得分:2)

  1. 您根本不需要Product#userid方法。
  2. Product#userid方法中,您引用了@product。这是Product上的product实例变量。您不需要实例变量来引用自身的对象,只需使用self,但大多数情况下它都是隐式的。您实际上只是在不明确的情况下需要它(例如user_id = 1可能是self.user_id=(1)或将user_id变量分配给1。)
  3. 您无需在foreign_key模型上指定User,因为您遵循惯例。
  4. 所以以下内容应该对您有用:

    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'