使用带有验证的link_to切换rails boolean

时间:2013-06-03 02:09:28

标签: ruby-on-rails ruby routes boolean

我有一个答案模型有一个"正确"布尔列,与stackoverflow非常相似,答案可以标记为正确。我有以下控制器代码使用切换!切换"正确"的方法但是,布尔值切换!跳过我想避免的所有验证。

如何修改代码以避免使用切换!在控制器中允许验证并仍然使用单个按钮来切换布尔值?

的routes.rb

resources :answers do 
    member { put :correct }
  end

correct_answer PUT    /answers/:id/correct(.:format)                 answers#correct

answers_controller.rb

 def correct 
    @answer = Answer.find(params[:id])
    if @answer.toggle!(:correct)
    respond_to do |format|
      format.html { redirect_to @answer, notice: "Submitted" }
      format.js
      end
    end

_answer.html.erb

<div id="correct_answer_<%= answer.id %>" class="<%= answer.correct == true ? 'green-tick' : 'default-tick' %>">
    <% if answer.question.user == current_user %>
       <%= link_to "✓", correct_answer_path(answer), id: "tick", class: "correct_#{answer.id}", remote: true, method: :put %>
    <% else %>
       <% if answer.correct == true %>
         <div id="tick", class='correct_<% answer.id %>'> ✓</div>
       <% end %>
    <% end %>
</div>

1 个答案:

答案 0 :(得分:2)

source code显示

def toggle!(attribute)
  toggle(attribute).update_attribute(attribute, self[attribute])
end

并且update_attribute没有运行验证,即。 save(false)

您可以使用运行验证的update_attributes覆盖它 喜欢这个

def toggle!(attribute)
  toggle(attribute).update_attributes({attribute => self[attribute]})
end