0

保存用户产品时如何将当前用户添加到 user_product 表。

我在网上查看了一些信息,表明我可以将参数传递给构建方法,但这不起作用。错误消息是“无法批量分配受保护的属性:user_id”

产品控制器:

定义新

@product = Product.new

@product.user_products.build(:user_id => current_user)

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @product }
end

结尾

我的模型是:Product, User,User_Product

类产品 < ActiveRecord::Base

    attr_accessible :name, :issn, :category, :user_products_attributes

    validates_presence_of :name, :issn, :category
    validates_numericality_of :issn, :message => "has to be a number"

    has_many :user_products
    has_many :users, :through => :user_products

    accepts_nested_attributes_for :user_products

end




class UserProduct < ActiveRecord::Base

  attr_accessible :price

  validates_presence_of :price
  validates_numericality_of :price, :message => "has to be a number"

  belongs_to :user
  belongs_to :product

end

class user < ActiveRecord::Base

  # devise authentication here

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :user_products, :dependent => :destroy
  has_many :products, :through => :user_products

end
4

1 回答 1

0

我建议如下:

Product
  has_many :preferences
  has_many :users, :through => preferences
  has_one :product_photo # if 1 per product

User
  has_many :preferences
  has_many :products, :through => :preferences

Preference
  belongs_to :user
  belongs_to :product

ProductPhoto
  belongs_to :product

不管你做什么,确保你注意大写和复数,因为 rails 对此非常挑剔。如果您没有正确使用 rails 约定,则代码将无法正常工作(更糟糕的是,您将开始编写黑客来解决感知到的“问题”),例如 User_Product 应该是 UserProduct (或我的答案中的 Preference )而不是 User_Product - 因为类定义模型名称(对它的引用使用小写和下划线)。

于 2012-09-02T13:46:00.727 回答