Rails:使用link_to切换布尔状态

时间:2015-01-10 05:52:44

标签: ruby-on-rails boolean toggle

为我的rails应用添加了管理员视图(这:http://www.interque.co/)。添加了一个布尔状态,用于批准每个问题。我试图通过点击我已标记为已批准的链接来切换该状态。

这是我的控制器:

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。

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:3)

将remote:true添加到您的链接并添加一个设置布尔状态的控制器操作。您可能希望检查链接是否已更改为“已批准”#39;之后(包括在答案中)。另一件好事是在出现错误时显示错误消息并在请求期间禁用链接。

配置/ routes.rb中

resources :questions do
  member do
    put :approve
  end
end

视图/管理/ index.html.erb

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

视图/问题/ approve.js.erb

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

控制器/ questions_controller.rb

respond_to :js

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