使用单选按钮将输入值从正变为负

时间:2014-06-24 21:37:08

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

我正在尝试使用单选按钮将输入的数量从正数转换为负数,但是我没有访问我想要更改的表单属性的值。我是新人,所以让我试着解释一下我的想法。我开始尝试在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

1 个答案:

答案 0 :(得分:0)

在我的创建操作中,我通过调用表单属性上的:amount方法更新了.to_d属性,然后将to_sto_i方法链接到{{1}如果:creed_or_deb为false,我只会转换:amount属性。

创建操作如下所示:

:creed_or_deb

将此逻辑留在创建操作中似乎相当精益,但欢迎任何输入。