Обновите отдельный атрибут с полями немодельной формы - PullRequest
1 голос
/ 07 августа 2011

У меня есть страница с именем cashcount, и на этой странице я хочу, чтобы пользователь мог вводить сумму в четверть, десять центов, никелей, пенни (в количестве, а не в стоимости), номер каждого типа счета и т. Д.в текстовые поля формы.

Когда пользователь нажимает кнопку для отправки данных, я хотел бы автоматически суммировать все поля в их денежные значения и сохранить их в моем поле shifts.startcash (котороетипа десятичного).

Каков наилучший способ настроить эту форму?

Вот мой pages_controller.rb

# Cash Count
def cashcount
  @title = "Count Cashbox"
  @shift = Shift.find(session[:shift_id])
end

Я знаю, что в контроллере моей смены я, вероятно, захочусоздайте метод, такой как def update_cashstart или что-то в этом роде, чтобы я мог взять значения из текстовых полей и суммировать их, но я не уверен, как это сделать.

Обновленный код:

Это то, что я написал, но, похоже, ничего не обновляется:

countcash.html.erb:

<%= form_for :shift do |f| %>
    <div class="coins">
    Coins: <br />
    Quarters: <%= f.text_field :quarters %><br />
    Dimes: <%= f.text_field :dimes %><br />
    Nickels: <%= f.text_field :nickels %><br />
    Pennies: <%= f.text_field :pennies %><br /><br />
    </div>
    <div class="bills">
    Bills: <br />
    Twenties: <%= f.text_field :twenties %><br />
    Tens: <%= f.text_field :tens %><br />
    Fives: <%= f.text_field :fives %><br />
    Ones: <%= f.text_field :ones %><br /><br />
    </div>
    <div class="other">
    Please enter the dollar amount of any other money in the drawer:
    Other: <%= f.text_field :others %>
    </div>
    <div class="actions">
    <%= f.submit %>
    </div>
<% end %>

Shift.rb

before_save :sum_coinage, :unless => :all_coins_blank?
def all_coins_blank?
    if (@quarters.nil? and @nickels.nil? and @dimes.nil? and @pennies.nil? and @twenties.nil? and @tens.nil? and @fives.nil? and @ones.nil? and @others.nil?)
        true
    else
        false
    end
end

def sum_coinage
    self.cashstart = ((@quarters * 0.25) + (@nickels * 0.05) + (@dimes * 0.10) + (@pennies * 0.01) + (@twenties * 20) + (@tens * 10) + (@fives * 5) + @ones + @others)
end

Это выходные данные сервера rails:

Started POST "/countcash" for 127.0.0.1 at Mon Aug 08 17:22:30 -0400 2011
 Processing by PagesController#countcash as HTML
Parameters: {"commit"=>"Save Shift", "shift"=>{"quarters"=>"55", "others"=>"", "tens"=>"", "fives"=>"", "dimes"=>"5", "ones"=>"", "pennies"=>"", "twenties"=>"", "nickels"=>""}, "authenticity_token"=>"IQsaKJARVrQOveEC/UTll2iFZ0OWvRmvNxGkqI6DRLE=", "utf8"=>"✓"}

Кажется, эти обновления не помещаются в актуальную базу данных: |

1 Ответ

1 голос
/ 08 августа 2011

Это то, что вы должны сделать в своей модели.Я хотел бы создать виртуальный атрибут (атрибут модели, который фактически не поддерживается базой данных) для каждого наименования, которое вы хотите.Затем вы можете суммировать значения монет и назначать их с помощью фильтра before_create.

class Shift < ActiveRecord::Base
  attr_accessor :quarters, :nickels, :dimes, :etc
  before_create :sum_coinage

  def sum_coinage
    self.startcash = (@quaters * 0.25) + (@nickels * 0.05) + (@dimes * 0.10)
  end
end

И тогда ваше представление может использовать обычные поля ввода для различных монет, например

<% form_for :shift do |f| %>
  <%= f.text_field :quarters %>
  <%= f.text_field :nickels %>
  etc
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...