rails controller respond_to if / else基于action是否成功

时间:2015-12-07 17:51:23

标签: ruby-on-rails controller

我如何根据html和js的自定义操作的成功使用条件。使用基本操作(更新,创建)可以很好地工作,但在这里我无法正确地删除if / else语句,所以我没有检查操作是否成功

使用format.js表单我正在使用AJAX和complete.js.erb。

控制器

def complete
  @task.update_attribute(:completed_at, Time.now)
  respond_to do |format|
    format.html { redirect_to completed_tasks_user_tasks_path(current_user), notice: "Task completed!" }
    format.js
  end
end

视图

<% if task.completed_at == nil %>
  <%= link_to complete_user_task_path(id: task.id), action: :complete, remote: true, method: :patch do %>
    <i class="fa fa-check"></i>
  <% end %>
......

1 个答案:

答案 0 :(得分:1)

此处的操作始终会成功,因为update_attribute不会运行验证/回调。所以你不应该检查这个动作是否成功。如果您担心它会引发错误,您可以在begin...rescue周围update_attribute,但除此之外您不必担心它。

或者,如果您希望它运行它们,请将其更改为if @task.update(completed_at: Time.now)并适当切换返回值。