У меня есть модель ownership
, которая принадлежит модели product
и модели user
.Как использовать условия для параметров в Rails Controller
ownership
имеет следующие параметры:
- user_id (целое число)
- product_id (целое число)
- owning_date (DateTime)
- given_date (DateTime)
- тока (булево)
- согласовано (boolean)
Пользователь является владельцем продукта, когда текущее значение истинно. current is true, когда owning_date не равен нулю, а given_date равен нулю.
У меня есть update
метод в моем контроллер собственности, который определяется следующим образом:
def update
@ownership = Ownership.find(params[:id])
@ownership.update_attributes(ownership_params)
respond_to do |format|
format.html do
flash[:success] = t('flash.success.ownership.update')
redirect_to product_path(@ownership.product)
end
format.js
end
end
Я создал кнопку и кнопку с тейк согласен:
<%= form_for(ownership, remote: true) do |f| %>
<div><%= f.hidden_field :agreed, value: true %></div>
<%= f.submit "agree" %>
<% end %>
<%= form_for(ownership, remote: true) do |f| %>
<div><%= f.hidden_field :owning_date, value: Time.now %></div>
<%= f.submit "take" %>
<% end %>
Теперь я хочу изменить метод обновления в моем контроллере b если пользователь нажмет на кнопку , возьмите кнопку, заданное значение предыдущего права собственности должно быть изменено на Time.now
. Но я не хочу, чтобы мой метод обновления делал это, когда пользователь нажимал кнопку с соглашением.
Я пробовал следующий код, но он не работал. После нажатия на кнопку было два владельца с током для одного и того же продукта.
def update
@ownership = Ownership.find(params[:id])
if @ownership.owning_date != params[:owning_date]
@ownership.product.ownerships.find_by(current: true).update_attributes(given_date: Time.now, current: nil)
end
@ownership.update_attributes(ownership_params)
respond_to do |format|
format.html do
flash[:success] = t('flash.success.ownership.update')
redirect_to product_path(@ownership.product)
end
format.js
end
end
У вас есть идея?
Wahou, замечательная идея! Спасибо ! Я пробую это прямо сейчас! –
Ooops, это не сработало ... У меня все еще есть два существующих владельца только для одного пользователя ... Можете ли вы немного объяснить код, который я должен написать? –
Попробуйте отладить, какие атрибуты и значения получили для обновления, когда вы нажимаете «соглашаться» или «принимать». И можете ли вы поделиться своим кодом «update»? –