我正在尝试将应用程序迁移到rails 4和ruby2。
在我的模型中,我有这个:

attr_accessor :name, :age, :price

我换成了:
attr_reader :name, :age, :price

在我看来:
  %td.small
    = number_with_precision(@p.get_last_usd_price.to_f, precision: 2, delimiter: ",", strip_insignificant_zeros: true)

在Rails3.2和Product中,一切都很好但现在我有个问题:
  def get_last_usd_price
    price = 0.0
    puts "--------------------"
    puts self.inspect          #---> prints a #<product> with all the correct attributes
    puts
    puts self.name.inspect     #---> prints nil
    puts @name.inspect         #---> prints nil
    puts "--------------------"
    # blah blah
  end

基本上,当我试图访问它们时,所有的变量都是空的,但是它们被正确地保存到对象实例中。
我做错什么了我该怎么解决?
提前谢谢。
编辑:控制器
  def detail_product
    @p = Product.find(params[:product_id]) if params[:product_id].present?
    if [email protected]? then
      flash[:error] = 'No product id'
      redirect_to  :action => :products
    end
  end

最佳答案

如果属性attr_readersattr_accessors:name保存在数据库中,则删除:age/:price,因为Rails已经定义了这些方法。
有关更多信息,请检查此答案:https://stackoverflow.com/a/14452353/1279707

09-25 15:41