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
为我的 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