This morning I wake up with this strange problem, where a mangoid creates an entry for attributes that are not defined in the model
To overcome this, I decided to implement attr_accessible, also mention the Mongoid specification
"Providing a list of available fields is just the opposite of protecting them. Anything that is not defined as accessible will result in an error ." - Mongoid specification
I think everything will work fine. I am creating a dummy record, and I am also surprised that I inserted it as a contrast to the above.
" Anything that is not defined as accessible will throw an error
Here is my model structure
class PartPriceRecord
include Mongoid::Document
field :supplier_id,type: Integer
field :part_number,type: String
field :part_description, type: String
field :core_indicator,type: String
field :us_part_price,type: Float
field :us_core_price,type: Float
field :us_fleet_price,type: Float
field :us_distributor_price,type: Float
field :ca_part_price,type: Float
field :ca_distributor_price,type: Float
field :ca_core_price,type: Float
field :ca_fleet_price,type: Float
field :basic_file_id,type: Integer
index :part_number, unique: true
validates_presence_of :supplier_id
validates_presence_of :part_number
validates :part_number ,:format => { :with => /^[a-z0-9A-Z\s*-]+[-a-z0-9\s-]*[a-z0-9\s*-]+$/i ,:message => "Only AlphaNumeric Allowed" }
validates :supplier_id, :format => { :with => /^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i , :message => "Only Alphanumeric Allowed" }
validates :part_description,:format => { :with => /^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i ,:message => "Only Alphanumberic Allowed"} ,:allow_nil => true
validates :core_indicator ,:inclusion => { :in => %w(Y N),
:message => "%{value} is not a valid Coreindicator must be Y | N"
} ,:allow_nil => true,:allow_blank => true
validates :us_part_price,:us_core_price,:us_fleet_price,:us_distributor_price,:ca_part_price,:ca_core_price,:ca_fleet_price,:ca_distributor_price ,:format => { :with => /^([0-9]+(\.([0-9]{2}|[0-9]{1}))?)$/ ,:message => "should look like money" } ,:allow_nil => true,:allow_blank => true
@@required_attributes =[:supplier_id,:part_number,:part_description,:core_indicator,:us_part_price,:us_core_price,:us_fleet_price,:us_distributor_price,:ca_part_price,:ca_core_price,:ca_fleet_price,:ca_distributor_price]
@@not_required_attributes = ["_id","basic_file_id"]
cattr_reader :required_attributes,:not_required_attributes
attr_accessible :supplier_id,:part_number,:part_description, :core_indicator,:us_part_price,:us_core_price,:us_fleet_price,:us_distributor_price,:ca_part_price,:ca_distributor_price,:ca_core_price,:ca_fleet_price,:basic_file_id
end
and here is the entry created from my console
ruby-1.9.2-head :003 > PartPriceRecord.count()
=> 260317
ruby-1.9.2-head :004 > p1 = PartPriceRecord.new(:customer_id => "One",:part_number => "ASA",:supplier_id => "Supp")
=> #<PartPriceRecord _id: 4fa77921d2d8d60e39000002, _type: nil, supplier_id: "Supp", part_number: "ASA", part_description: nil, core_indicator: nil, us_part_price: nil, us_core_price: nil, us_fleet_price: nil, us_distributor_price: nil, ca_part_price: nil, ca_distributor_price: nil, ca_core_price: nil, ca_fleet_price: nil, basic_file_id: nil>
ruby-1.9.2-head :005 > p1.save
=> true
ruby-1.9.2-head :006 > PartPriceRecord.count()
=> 260318
Any idea why this is?
thank