对不起,我是铁杆的新手,但无法绕过这个。
我有一个具有各种属性的Order对象 - 没有引用
在我的控制器中,我可以通过attr_accessor单独打印属性,并通过puts在控制台中查看它们。 但是当我打电话时,他们都是零!有什么建议吗?
class Order < ApplicationRecord
attr_accessor :name, :email, :phone, :date, :dessert_type, :size, :quantity, :dessert, :comments, :total
validates :name, :date, :quantity, presence: true
validates :quantity, numericality: { only_integer: true, greater_than: 0}
validate :contact_provided?
private
def contact_provided?
if :email.blank? || :phone.blank?
errors.add(:base, "Please provide either phone or email so we can contact you!")
end
end
end
控制器
def create_order
puts "create_order object"
@order = Order.new order_params
if @order.valid?
puts @order.inspect
#everything is null here
@order.attributes.each do |attr_name, attr_value|
puts "#{attr_name}: #{attr_value}"
end
#this prints out fine!
puts "dessert: #{@order.dessert}"
end
end
参数
Parameters: {"utf8"=>"✓", "authenticity_token"=>"randomtoken", "order"=>{"name"=>"jim", "email"=>"test@email.com", "phone"=>"12345678", "dessert_type"=>"Cake", "size"=>"25.0", "dessert"=>"Chocolate Caramel", "date"=>"2018-04-15", "quantity"=>"1", "comments"=>""}, "commit"=>"Submit Order"}
非常感谢任何见解!
答案 0 :(得分:0)
那是因为这一行:
attr_accessor :name, :email, :phone, :date, :dessert_type, :size, :quantity, :dessert, :comments, :total
以Rails与它们一起使用的方式覆盖Order属性。在使用Rails时,您不需要该声明,因此您可以将它们删除为attr_accessor。
由于Order是ActiveRecord模型,因此ActiveRecord已经为所有对象属性生成了getter和setter。
您现在正在做的是定义所有属性,将attr_accessor作为虚拟属性,这些属性是模型中不会在数据库中保留的属性,只是&#34; 与数据库中的列不对应的属性&#34;。