Tag: mass assignment

Rails:属于另外两个模型的新入口

在我的应用程序中,产品有很多意见,由许多客户编写。 以下是具有关联的模型: class Product < ActiveRecord::Base attr_accessible :name, :desc, :price has_many :opinions end class Client < ActiveRecord::Base attr_accessible :name, :bio has_many :opinions end class Opinion < ActiveRecord::Base attr_accessible :rate, :comment belongs_to :client, :product end 在参数中,我有评估邀请ID,这有助于我同时获得product_id和client_id(所以考虑我同时拥有它们)。 表单仅包含费率(radio_button,从1到5)和注释(text_field)。 方法意见#create如何创建新意见,属于两种模式:客户端和产品? 我试图直接传递client_id和product_id,但是我收到了MassAssignment错误: # Remember: I have product_id and client_id product = Product.find_by_id product_id opinion = product.opinions.build params[:opinion] opinion.product_id = […]

Mongoid:如何防止通过批量分配创建未定义的字段?

这是代码: class M include Mongoid::Document field :name end params = { name: “foo”, age: 20 } M.create(params) #=> # 请注意, age未定义,但已保存。 这是有问题的(可能是DoS的来源),因为恶意用户可以在POST中添加任何参数,并且大字符串可以潜入未知字段。(例如name=foo&bogus=#{‘x’*1000000} ) 到目前为止,除了attr_accessible我找不到任何东西,但是对于Mongoid来说并不是很好,因为你必须在所有模型中attr_accessible在field和attr_accessible保持相同的字段名称。 不干。 我认为attr_accessible API非常适合ActiveRecord,因为有一个。 您没有明确定义模型(DRY)和b中的字段。 保证不存在将不存在的字段保存到RDB的可能性。 但是对于Mongoid,我认为应该有比attr_accessible更好的解决方案。 请注意,有一个全局配置设置allow_dynamic_fields但它不是关于质量分配,所以它超出了本讨论的范围,但我认为它实际上应该是一个每个模型的宏,并且还应该注意质量分配。 你是如何处理这个问题的?