我目前正在尝试将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周铁路知识的新手。请尽可能帮助。