我明确地为用户做了这个角色(正如你在下面看到的那样),但它说它不存在。请帮忙?顺便说一下,你可以看到我是如何硬编码的。
应用程序/控制器/应用controller.rb:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
helper_method :current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def require_user
redirect_to '/login' unless current_user
end
def require_admin
redirect_to '/' unless current_user.admin
end
end
User.create(first_name: "Johnny", last_name: "Appleseed", email: "j.appleseed@example", password: "MY AWESOME PASSWORD THAT NOBODY KNOWS", role: "admin")
分贝/迁移/ 20160109170743_create_users:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :email
t.string :password_digest
t.string :role, :default => "reader"
t.timestamps null: false
end
end
end
应用程序/控制器/用户控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to '/'
else
redirect_to '/signup'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :role)
end
end
答案 0 :(得分:0)
在不知道具体错误消息的情况下,我只能推测您的错误在此处:
admin
无论您在模型/数据库中使用哪些属性,您都只能获得定义的实例方法。您的User
对象中没有current_user.admin
,因此#app/models/user.rb
class User < ActiveRecord::Base
def admin?
self.role == "admin"
end
end
current_user.admin? #-> true / false
无效。
您需要使用以下内容:
true / false
虽然问号不是必需的,但它表示评估对象的属性(User
)。
另外,您可能希望在#app/models/user.rb
class User < ActiveRecord::Base
enum role: [:reader, :admin]
end
模型中添加enum
:
@user = User.find params[:id]
if @user.admin?
...
@admins = User.admin
#-> collection of "admin" users
这将为您提供一系列instance
& class
methods以更好地帮助您的逻辑:
role
要执行此操作,您需要将string
列从integer
更改为$sql_res = "select link, description, resources, keyword from _db where (description like '%$q1%' or keyword like '%$q1%') AND (description like '%$q2%' or keyword like '%$q2%')";
答案 1 :(得分:-1)
我建议您使用布尔值作为列角色。
User.rb
def admin?
self.role == true
end
所以你可以做到
redirect_to '/' unless current_user.admin?