我有一个答案模型有一个"正确"布尔列,与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>
答案 0 :(得分:2)
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