管理员不会显示按钮

时间:2017-05-10 14:27:59

标签: ruby-on-rails

管理员帐户不会显示该按钮。

迁移代码:

class DeviseCreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      ## Database authenticatable
      t.string :fname,              null: false, default: ""
      t.string :lname,              null: false, default: ""
      t.boolean :admin,             default: false
      t.string :email,              null: false, default: ""
      t.string :encrypted_password, null: false, default: ""
      ...

型号代码:

def admin? 
  self.admin == true 
end

这是视图的代码:

<% if current_user && current_user.admin? %>
    <%= link_to 'New category', new_category_path %>
<% end %>

我从rails控制台设置管理员,如下所示:

a = User.find(1)
=> #<User id: 1, fname: "", lname: "", admin: false, email: "bobonnaaa@gmail.com", created_at: "2017-05-10 21:29:29", updated_at: "2017-  05-10 22:08:28">
a.admin = true
=> true
a
=> #<User id: 1, fname: "", lname: "", admin: true, email: "bobonnaaa@gmail.com", created_at: "2017-05-10 21:29:29", updated_at: "2017-05-10 22:08:28">

我做错了什么吗?请帮忙.....谢谢!

3 个答案:

答案 0 :(得分:0)

在你的控制台中,

User.find(1).update_attribute(:admin, true) #you haven't save your user after assigning true to admin

那么你不需要admin?方法,因为它是一个布尔数据类型,你可以直接使用like,

<% if current_user.try(:admin) %>
  <%= link_to 'New category', new_category_path %>
<% end %>

答案 1 :(得分:0)

首先,不要定义admin?方法。它已经存在。

然后,您需要在记录中保留更新,以便运行User.find(1).update(admin: true)

并在视图中:

<% if current_user&.admin %>
  <%= link_to 'New category', new_category_path %>
<% end %>

答案 2 :(得分:0)

您是否在控制台中保存了记录?在使用您当前指定的方式分配a.save后,您必须致电a.admin = true