attr_accessor和attr_reader在Rails 4中不起作用

时间:2013-11-25 14:02:20

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试将应用程序迁移到rails 4和ruby2。

在我的模型Product中,我有这个:

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)

使用rails 3.2和attr_accessor一切正常。但现在我在get_last_usd_price中遇到了一个问题:

  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

基本上,当我尝试访问它们时,所有变量都是nil,但它们被正确保存到对象实例中。

我做错了什么?我该如何解决这个问题?

提前致谢。

编辑:控制器

  def detail_product
    @p = Product.find(params[:product_id]) if params[:product_id].present?
    if !@p.present? then
      flash[:error] = 'No product id'
      redirect_to  :action => :products
    end
  end

1 个答案:

答案 0 :(得分:8)

如果属性attr_readersattr_accessors:name保存在数据库中,则删除:age / :price,因为Rails已经定义了这些方法。

有关详情,请查看以下答案:https://stackoverflow.com/a/14452353/1279707