1

http://ruby.railstutorial.org/ruby-on-rails-tutorial-bookとRailsCast 274(http://railscasts.com/episodes/274-remember-me-reset-password)で提示されている権限に基づいて、Rails 3.1で私自身の基本的なブログツールを構築しました。私は、このユーザーの2つの値をチェックしたいことを、今、私は問題を持っているRails 3.1ヘルパーメソッドcurrent_userの値を確認する

def current_user 
    @current_user ||= User.find_by_auth_token!(cookies[:auth_token]) if cookies[:auth_token] 
end 

:だから私はこのようになります私のRailsアプリで私のセッション管理のためのCURRENT_USERを持っています。

私のユーザーモデルは次のようになります。

# == Schema Information 
# 
# Table name: users 
# 
# id    :integer   not null, primary key 
# name   :string(255) 
# email   :string(255) 
# password_digest :string(255) 
# admin   :boolean   default(FALSE) 
# created_at  :datetime 
# updated_at  :datetime 
# auth_token  :string(255) 
# writer   :boolean   default(FALSE) 
# website   :string(255) 
# 

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :website, :password, :password_confirmation 
    has_secure_password 

    has_many :articles, :dependent => :destroy 

    email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    website_regex = /(^$)|(^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$)/ix 

    validates :name, :presence => true, 
        :length => { :maximum => 50 } 
    validates :email, :presence => true, 
        :format => { :with => email_regex }, 
        :uniqueness => { :case_sensitive => false } 
    # Automatically create the virtual attribute 'password_confirmation'. 
    validates :password, :presence  => true, 
         :confirmation => true, 
         :length  => { :within => 6..40 } 
    validates :website, :format => { :with => website_regex } 

    before_create { generate_token(:auth_token) } 

    private    
    def generate_token(column) 
     begin 
     self[column] = SecureRandom.urlsafe_base64 
     end while User.exists?(column => self[column]) 
    end 
end 

私が確認したい値はです:管理者:作家、彼らが真であるかどう。ご覧のとおり、管理者だけがこれらの値を編集できるようにするため、アクセス可能とマークされていません。私はこれをRailsCast 237のように解決します(リンクを挿入したいのですが、2つ以上のリンクを投稿する新しいユーザーとして許可されていません)。コントローラのこれらのパラメータを確認するにはcurrent_user.admin?またはcurrent_user.writer?は問題ありません。しかし、私は次のようなエラーメッセージを取得ビューでこれをしようとした場合:

ActionView::Template::Error (undefined method `writer' for nil:NilClass): 
    15:  <li><%= link_to "Log in", signin_path %></li> 
    16:  <% end %> 
    17:  </ul> 
    18:  <% if current_user.writer == true %> 
    19:  <ul> 
    20:  <li><%= link_to "new article", newarticle_path %></li> 
    21:  </ul> 
    app/views/layouts/_header.html.erb:18:in `_app_views_layouts__header_html_erb___3376819447841576130_36475600' 
    app/views/layouts/application.html.erb:12:in `_app_views_layouts_application_html_erb__676755681270806253_35068900' 

すると、この問題が解けるとどのようであれば、誰かが私に教えていただけますか?私はとても感謝しています!

更新1:私は考えました。current_user.admin?またはcurrent_user.writer?はコントローラでも動作しません。だから私はそれのために一般的なヘルパーメソッドが必要なようだ。

答えて

1

このエラーは、あなたがログインしていないことを意味します。 'current_user'変数には注意があります。

ユーザーがログインしているかどうかをもう一度確認する必要があります。

だからこれを試してください。

<% if current_user %> 
    <% if current_user.writer %> 
    <% end %> 
    #this will return true no need for doing current_user.writer == true 
<% end %> 

私の問題を解決し、これは

+0

はどうもありがとうございまし役立つことを願っています! –

関連する問題