我试图在视图中实现一些条件,如“编辑”和“删除”按钮应该只有当当前用户是我的应用程序管理员可见。当我在我的articles/index.html.erb页面中尝试<%if current_user.is_admin%>时,出现未定义的方法“is_admin”错误。NoMethodError在文章#索引undefined方法`is_admin'为零:NilClass
我不能在文章索引页面中使用设计的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
型号: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
喜烤饼,它为我,非常非常感谢,今天你救了我:)但我无法理解为什么它的工作,而不是current_user.is_admin。你能解释一下吗? – 2013-04-04 19:45:39
正如我所提到的那样,用户可能没有登录。try函数只检查它的剩余对象是否为零,否则将调用括号中的函数,否则不会。 – scones 2013-04-04 19:47:34
现在明白了。 btw谢谢。 – 2013-04-04 19:49:51