我正在尝试使用单选按钮将输入的数量从正数转换为负数,但是我没有访问我想要更改的表单属性的值。我是新人,所以让我试着解释一下我的想法。我开始尝试在create操作中转换:amount
属性值,但是没有对该值执行数学运算,这使我相信我没有正确访问该属性。然后我试图通过在我的控制器顶部使用before_action
过滤器来创建一个过滤值的方法,显然无济于事。我想我的问题是两部分。 1)如何从表单中正确访问属性2)最好将此逻辑保留在控制器中,还是应该将其移动到控制器中。这是一个简单的应用程序,可以添加或减去值,然后更新余额。欢迎任何帮助。
这是我的表格:
<%= form_for(@deposit) do |f| %>
<div><%= f.label :amount, class: "col-xs-10 col-xs-offset-1" %></div>
<div><%= f.number_field :amount, autofocus: true, class: "col-xs-10 col-xs-offset-1" %></div>
<div class="col-xs-1 col-xs-offset-2" ><%= f.radio_button(:cred_or_deb, true)%></div>
<div><%= f.label :cred_or_deb, "Credit", class: "col-xs-3" %></div>
<div class="col-xs-1 col-xs-offset-1"><%= f.radio_button(:cred_or_deb, false) %></div>
<div><%= f.label :cred_or_deb, "Debit", class: "col-xs-3" %></div>
<div><%= f.submit "Add", class: "btn btn-lg btn-dollars" %></div>
<% end %>
这是我在我的控制器中的创建动作:
def create
@deposit = current_user.cash_records.build(cash_params)
if @deposit.save
@deposit.update_attribute(:balance, current_user.cash_records.sum(:amount))
redirect_to user_path(current_user)
else
render 'cash_records/new'
end
end
我认为最好使用before操作来检查参数:
def negate_amount
if cash_params[:cred_or_deb] == false
current_user.cash_records.build(cash_params[:amount]) * 2.0
end
end
我的强大参数是:
private
def cash_params
params.require(:cash_record).permit(:amount, :cred_or_deb)
end
答案 0 :(得分:0)
在我的创建操作中,我通过调用表单属性上的:amount
方法更新了.to_d
属性,然后将to_s
和to_i
方法链接到{{1}如果:creed_or_deb
为false,我只会转换:amount
属性。
创建操作如下所示:
:creed_or_deb
将此逻辑留在创建操作中似乎相当精益,但欢迎任何输入。