我目前有一个名为“users”的视图页面。在我的视图页面中,我正在显示一个表,其中包含从users表中提取的属性,例如名字,姓氏,上次登录,管理员等等。在admin字段中,它显示来自users表的true或false 。
我想要完成的是创建一个下拉列表,显示用户当前的admin值(true或false),然后能够从视图页面更改此属性。目前,我不得不使用服务器上的控制台手动将用户的值更改为true或false以授予或撤消管理员权限。不用说,这很不方便。我仍然是Rails的新手,到目前为止一直在使用支架。我不知道如何做到这一点,任何建议都将不胜感激!
用户架构:
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.boolean "admin", default: false
t.string "first_name"
t.string "last_name"
end
管理员控制器:
class AdminController < ApplicationController
before_action :authenticate_user!
def users
@users = User.all.order('last_name ASC')
end
def reports
end
end
用户查看页面:
<table class="table table-hover table-condensed">
<thead>
<tr>
<th>Last Name</th>
<th>First Name</th>
<th>Email</th>
<th>Creation Date</th>
<th>Last Sign In</th>
<th>IP Address</th>
<th>Admin</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.last_name %></td>
<td><%= user.first_name %></td>
<td><%= user.email %></td>
<td><%= user.created_at.strftime("%-m/%-d/%y") %></td>
<td><%= user.current_sign_in_at.strftime("%-m/%-d/%y") %></td>
<td><%= user.current_sign_in_ip %></td>
<td><%= user.admin %></td>
</tr>
<% end %>
</tbody>
</table>
答案 0 :(得分:0)
您可以通过几种不同的方式实现这一目标。例如,您可以让下拉菜单中的链接触发方法toggle_admin
,以便在用户为管理员时删除管理员,如果是这种情况则反向删除。
首先在routes.rb中创建路由:
resource :users do
get :toggle_admin
end
在您看来:
<%=link_to (@current_user.admin ? 'Remove admin' : 'Make admin'), toggle_admin_users_path %>
在你的控制器中,你可以有这样的东西:
def toggle_admin
@current_user.update_attribute :admin, (@current_user.admin ? false : true)
end
嗯......是的,我不知道。可以工作。正如您所看到的,我假设您有一个@current_user
变量用于获取相关用户,否则将user.id发送到这些方法中,可以是url参数,也可以直接发送到控制器方法。
答案 1 :(得分:0)
首先,您需要一个处理更新的路由和相应的控制器操作。
以RESTful方式,这将位于routes.rb
:resources :users, only: [:update]
在您的视图中,您需要一个from,它将数据发送到控制器:
<%= form_for user do %>
...
@users.each
中的每个用户都应拥有自己的表单和提交按钮。要创建select
(即true/false
值下拉列表),请使用Rails form helper。
控制器操作可能如下所示:
def update
user = User.find(params[:id])
user.update_attributes(user_params)
end
private
def user_params
params.require(:user).permit(:admin)
end