Rails:使用 link_to 切换布尔状态

Rails: Toggle a Boolean State with a link_to

为我的 rails 应用添加了管理视图(这个:http://www.interque.co/)。为每个问题添加了一个用于批准的布尔状态。我正在尝试通过单击 link 我已标记为已批准。

来切换该状态

这是我的控制器:

class AdminController < ApplicationController
  def index
    @questions = Question.all
    unless current_user && current_user.administrator?
        redirect_to root_path
    end
  end
end

这是我正在使用的管理视图,其中列出了所有未批准的问题:

<% if current_user %>
  <% @questions.each do |question| %>
    <% if question.approved == false %>
    <div>
        Title: <%= question.title %><br>
        Description: <%= question.description %><br>
        <%= link_to "Approve", question_path(question), :method => :put %>
    </div>
    <br>
    <% end %>
  <% end %>
<% end %>

我可以通过单击 link_to 来切换状态吗?我只需要设置 question.approved = true。

如有任何帮助,我们将不胜感激。提前致谢。

将 remote: true 添加到您的 link 并添加一个设置布尔状态的控制器操作。您可能需要检查 link 之后是否更改为 'approved' (包含在答案中)。另一件好事是在出现错误时显示错误消息并在请求期间禁用 link。

config/routes.rb

resources :questions do
  member do
    put :approve
  end
end

views/admin/index.html.erb

<span class="approve-question">
  <%= link_to "Approve", approve_question_path(question), :method => :put, remote: true %>
</span>

views/questions/approve.js.erb

$('.approve-question').html('Approved');

controllers/questions_controller.rb

respond_to :js

def approve
  @question = Question.find(params[:id])
  if @question.update(approved: true)
    render
  else
    render @question
  end
end