我正在尝试在视图中实现某些条件,例如“编辑”和“删除”按钮只有当前用户是我的应用程序的管理员时才可见。当我尝试<%if current_user.is_admin%>在我的文章/ index.html.erb页面中,我得到未定义的方法“is_admin”错误。
我不能在文章索引页面中使用current_user设计方法来获取用户吗?请建议我如何获取用户,然后检查用户是否是管理员。
我的代码文件如下:
物品/ index.html.erb
<%- model_class = Article -%>
<div class="">
<h1><%=t '.title', :default => model_class.model_name.human.pluralize %></h1>
</div>
<div style="border: 1px solid #1763A4;border-radius: 4px 4px 4px 4px;margin: 0 0 20px; padding: 20px 20px 10px;">
<% @articles.each do |article| %>
<div style="border: 1px solid #51702E;border-radius: 4px 4px 4px 4px;margin: 0 0 20px; padding: 20px 20px 10px;">
<div style="color:#51702E"><h2><%= article.title %></h2></div>
<div style="color:#666666"> <%= article.created_at %></div>
<% if current_user.is_admin %>
<div> <%= truncate(article.body, :length => 500, :separator => ' ') %></div>
<%= link_to "edit",edit_article_path(article), :class => 'btn btn-warning btn' %>
<%= link_to "delete",article_path(article),:method => :delete,:confirm => 'Are you sure?',:class => 'btn btn-danger' %>
<% end %>
<%= link_to "VIEW MORE...",article_path(article), :class => 'btn btn-primary' %>
</li>
</div>
<% end %>
<%= link_to "Create new Article", new_article_path, :class => 'btn btn-large btn-primary' %>
articles_controller.rb
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
def new
@article = Article.new
end
def create
@article = Article.new(params[:article])
@article.save
redirect_to article_path(@article)
end
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to action: 'index'
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
@article.update_attributes(params[:article])
flash.notice = "Article '#{@article.title}' Updated!"
redirect_to article_path(@article)
end
end
model:article.rb
class Article < ActiveRecord::Base
attr_accessible :title, :body
has_many :comments
belongs_to :user
end
user.rb
class User < ActiveRecord::Base
has_many :articles
has_many :comments
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :username, :email, :password, :password_confirmation, :remember_me
attr_accessible :title, :body
end
用户表
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
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.boolean "is_admin"
t.boolean "is_active"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "username"
end
答案 0 :(得分:1)
来自https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role
如果页面可能没有设置current_user,那么:
if current_user.try(:admin?)
# do something
end
或者在你的情况下
if current_user.try(:is_admin)
# do something
end
当没有当前用户(即未登录)
时,这应该有效答案 1 :(得分:0)
您的用户模型是否具有admin属性?
如果不是需要定义一个,例如
class AddAdminToUsers < ActiveRecord::Migration
def self.up
add_column :users, :admin, :boolean, :default => false
end
def self.down
remove_column :users, :admin
end
end
然后运行rake db:migrate
然后,您应该可以通过以下方式检查用户是否为管理员:
current_user.admin?
还有其他选择可以在设计中执行此操作,请在此处查看
https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-role