Rails 4通过View页面更新数据

时间:2014-10-08 13:38:57

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.1

我目前有一个名为“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>

2 个答案:

答案 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.rbresources :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