2013-07-16 3 views
0

У меня есть модель 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 

У вас есть идея?

ответ

2

Возможно, вы хотите проверить, что форма ведьмы представлена ​​и выполняет какое-либо действие в зависимости от выбора пользователя?

Простая проверка, как это в OwnershipCcontroller#update

if params[:commit] == 'take' 
    # do some action 
else 
    # do another action 
end 
+1

Wahou, замечательная идея! Спасибо ! Я пробую это прямо сейчас! –

+0

Ooops, это не сработало ... У меня все еще есть два существующих владельца только для одного пользователя ... Можете ли вы немного объяснить код, который я должен написать? –

+1

Попробуйте отладить, какие атрибуты и значения получили для обновления, когда вы нажимаете «соглашаться» или «принимать». И можете ли вы поделиться своим кодом «update»? –

Смежные вопросы