1

「正しい」ブール列を持つ回答モデルがあります。スタックオーバーフローと同じように、回答を正しいとマークできます。トグルを使用する次のコントローラーコードがあります! 「正しい」ブール値を切り替えるメソッドですが、切り替えてください!回避したいすべての検証をスキップします。

トグルを使用しないようにコードを修正するにはどうすればよいですか? コントローラーで検証を許可し、単一のボタンを使用してブール値を切り替えますか?

ルート.rb

resources :answers do 
    member { put :correct }
  end

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

answer_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 %>'> ✓&lt;/div>
       <% end %>
    <% end %>
</div>
4

1 に答える 1

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
于 2013-06-03T02:42:26.337 に答える