我正在尝试在诸如“编辑”和“删除”按钮之类的视图中实现某些条件,只有当当前用户是我的应用程序的管理员时才应该可见。当我在我的文章/index.html.erb 页面中尝试 <% if current_user.is_admin %> 时,我得到未定义的方法“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' %>
文章控制器.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
型号:article.rb
class Article < ActiveRecord::Base
attr_accessible :title, :body
has_many :comments
belongs_to :user
end
用户.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