我已经查看了几十个堆栈溢出帖子,并且没有找到可行的解决方案,这就是为什么我要联系一个记录良好的用例。
我有一个应该这样做的按钮。
现在,我能够调用自定义控制器方法的唯一方法是通过这种方式感觉非常hacky。我已经把它剥离到尽可能简单。
的routes.rb
match 'admin/:id/toggleAdmin' => 'admin#toggleAdmin', via: [:patch, :put], as: :toggleAdmin
list.html.erb
<td><%= link_to "Toggle Admin", toggleAdmin_path(id: user.id), method: :patch %></td>
admin_controller.rb
class AdminController < ApplicationController
def toggleAdmin
idToToggle = User.find(params[:id]).id
if idToToggle == current_user.id
redirect_to admin_list_path, danger: "You tried to make yourself a normal user! Don't do that!"
else
User.find(params[:id]).updateToAdmin()
redirect_to admin_list_path, info: "The user with an ID of #{idToToggle} has had their admin attribute toggled!"
end
end
端
当切换管理员时,我想要做的不是重新加载页面,而是使用一些javascript来重写dom的那一部分。
有什么更好的方法可以解决这个问题?
以下是我已经尝试过的各种资源中的一小部分。
感谢您的帮助。
---编辑以获取更多信息。
使用干净的rails应用程序我现在能够更干净地调用控制器方法但是我没有得到ajax请求来更新页面以显示操作已完成。 (我期待布尔值更改和闪存)。以下是相关代码:
users.js
$("#edit-form").html("<%= j render partial: 'form', locals: { user: @user } %>")
_form.html.erb
<%= form_for user do |form| %>
<%= user.admin %>
<% end %>
<%= link_to "Toggle Admin", toggle_admin_user_path(user), method: :put, remote: true %>
edit.html.erb
<h1>Editing User</h1>
<div id="edit-form">
<%= render partial: 'form', locals: { user: @user } %>
</div>
<%= link_to 'Show', @user %> |
<%= link_to 'Back', users_path %>
users_controller.rb请注意,我只包含了toggle_admin
和其他一些方法,其余的只是脚手架。
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy, :toggle_admin]
def toggle_admin
if 1 == 1
logger.info "This is from info"
u = User.find(params[:id])
u.admin = !(u.admin)
u.save
respond_to do |format|
format.js { flash[:info] = "The user with an ID of #{@user.id} has had their admin attribute toggled!" }
end
else
redirect_to admin_list_path, danger: "You tried to make yourself a normal user! Don't do that!"
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.fetch(:user, {})
end
end