Я думаю, что вы почти у цели, возможно, у вас есть именованный маршрут, который позволяет вам сделать это как объявление формы:
<%= form_for @shift, :url => countcash_shift_path(@shift) do |f| %>
Если сомневаетесь, запустите в вашей консоли rake route, чтобы определить, так ли этомаршруты существуют.Если это не так, возможно, вы захотите изучить маршруты RESTful, которые должны выглядеть примерно так в вашем маршруте. Rb:
resources :shifts
Внутри действия countcash в вашем контроллере, это просто вопрос выполненияthis:
@shift = Shift.find(session[:id])
@shift.update_attributes(params[:shift]
Это должно работать при условии, что у вас настроены маршруты RESTful для ресурса сдвига.Кроме того, я предполагаю, что ваша модель / база данных настроена на четверти, десять центов и т. Д. В качестве отдельных полей (в противном случае вам потребуются более сложные, чем update_attributes).
Поскольку эти отдельные поля отсутствуют вбазу данных (согласно вашему комментарию), вы не должны помещать как часть формы модели.Таким образом, вместо:
<%= f.text_field :dimes %>
Вы бы сделали что-то вроде:
<%= text_field_tag :dimes, params[:dimes] %>
А внутри вашего контроллера вы можете просто получить к ним доступ так:
params[:dimes] + params[:quarters] # multiply as per currency logic
Если вы хотите получить немного больше фантазии, вы можете написать методы, которые принимают эти значения, так что вы по-прежнему оставляете форму в качестве текущего состояния, но добавляете методы, которые принимают значения, и что-то делаете с ними, например, так(для всех типов валюты, а не только для центов):
def dimes=(value)
@running_total += value
end
В вашем контроллере сделайте это вместо:
@shift.attributes = params[:shift]
Итак, когда вы передаете свою модель хешуатрибутов, он попытается назначить значения на основе имен символов.Таким образом, значение dimes в params будет передаваться так, как если бы это вызывалось:
@shift.dimes = params[:shift][:dimes]
Я думаю, что это должно сработать для вас, если вы что-то используете @running_total.Вы можете использовать @amount или что-то еще, если это то, что у вас уже есть в качестве атрибута модели.