付款的虚拟属性出现问题

时间:2014-09-29 19:29:52

标签: ruby-on-rails ruby activerecord currency virtual-attribute

我目前正在尝试将price_in_cents字段转换为price_in_dollars的虚拟属性。我做了一些研究,基本上实现了railscast虚拟属性视频中的所有内容,这里是以下链接。

https://www.youtube.com/watch?v=Tr7tD2GPiXU

首先,我的数据库中的列是' amount'对于钱场。所以我跑了

$ rails g migration add_price_in_cents_to_payments price_in_cents:integer

然后,

$ rake db:migrate

我的应用程序只是用于创建新付款的基本CRUD支架。

我将getter setter方法添加到payment.rb文件中,就像这样。

 class Payment < ActiveRecord::Base
 attr_accessible :amount, :price_in_dollars, :from, :to
 # The price_in_dollars attribute is taking the place of :amount

 def price_in_dollars
   price_in_cents.to_d/100 if price_in_cents
 end

 def price_in_dollars=(dollars)
   self.price_in_cents = dollars.to_d*100 if dollars.present?
 end
end

并更改了表单字段以表示新的price_in_dollars属性。

<div class="field">
  <%= f.label :price_in_dollars %><br />
  <%= f.text_field :price_in_dollars %>
</div>

但是现在当我提交新的付款时,它会为我的&#34; new&#34;返回NoMethodError。和&#34;创造&#34;支付控制器中的方法。在视频中,贝茨甚至没有触摸他的控制器。这是我的控制器。

def new
    @payment = Payment.new

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @payment }
  end
end

# GET /payments/1/edit
def edit
    @payment = Payment.find(params[:id])
end

# POST /payments
# POST /payments.json
def create
    @payment = Payment.new(params[:payment])

  respond_to do |format|
    if @payment.save
      format.html { redirect_to @payment, notice: 'Payment was successfully created.' }
      format.json { render json: @payment, status: :created, location: @payment }
    else
      format.html { render action: "new" }
      format.json { render json: @payment.errors, status: :unprocessable_entity }
    end
  end
end

我是否需要指定在控制器中的所有CRUD方法中传递(params[:price_in_dollars])? 我是一名只有大约3周铁路知识的新手。请尽可能帮助。

0 个答案:

没有答案