0

私はレールに慣れていないので、ヘッダーにリンクを作成してプロファイルにサインイン/サインアウトしようとしています。次のコード、特に太字 (**) の領域の問題ではありません。

<body>
<div class="navbar navbar-fixed-top">
    <div class="navbar-inner">
        <div class="container">
            <a href="#" class="brand"> Test App</a>
            <ul class="nav">
        <li><%= link_to "All Statuses", statuses_path %></li>
      </ul>
      <ul class="nav pull-right">
        **<li><%= link_to current_user.full_name, "#" %></li>**

      </ul>
        </div>
    </div>
</div>
<div class="container">
<p class="notice"><%= notice %></p>
   <p class="alert"><%= alert %></p>
    <%= yield %>
</div>

次のようなエラーが表示され続けます。

ステータスの NoMethodError#index

18 行目が発生した /Users/test_app/app/views/layouts/application.html.erb を表示:

nil:NilClass の undefined method `full_name' 抽出されたソース (18 行目付近):

 <li><%= link_to "All Statuses", statuses_path %></li>
      </ul>
      <ul class="nav pull-right">
        <li><%= link_to current_user.full_name, "#" %></li>

      </ul>
    </div>

ステータス コントローラのコードは次のとおりです。

class StatusesController < ApplicationController
 # GET /statuses
 # GET /statuses.json
  def index

@statuses = Status.all
respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @statuses }
end
   end

# GET /statuses/1
  # GET /statuses/1.json
  def show
    @status = Status.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @status }
    end
  end

  # GET /statuses/new
  # GET /statuses/new.json
  def new
    @status = Status.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @status }
    end
  end

  # GET /statuses/1/edit
  def edit
    @status = Status.find(params[:id])
  end

  # POST /statuses
  # POST /statuses.json
  def create
    @status = Status.new(params[:status])

    respond_to do |format|
      if @status.save
        format.html { redirect_to @status, notice: 'Status was successfully created.' }
        format.json { render json: @status, status: :created, location: @status }
      else
        format.html { render action: "new" }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /statuses/1
  # PUT /statuses/1.json
  def update
    @status = Status.find(params[:id])

    respond_to do |format|
      if @status.update_attributes(params[:status])
        format.html { redirect_to @status, notice: 'Status was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @status.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /statuses/1
  # DELETE /statuses/1.json
  def destroy
    @status = Status.find(params[:id])
    @status.destroy

    respond_to do |format|
      format.html { redirect_to statuses_url }
      format.json { head :no_content }
    end
  end
end
4

1 に答える 1

1

ビューでは を呼び出しますがcurrent_user.full_name、そのcurrent_usernilでメソッドを呼び出すことはできません。あなたができることは次のとおりです。

<ul class="nav pull-right">
  <% if current_user %>
    <li><%= link_to current_user.full_name, "#" %></li>
  <% end %>
</ul>

これにより、ユーザーがログインしている場合にのみリンクが表示されます(current_userではなくユーザーインスタンスが返されることを意味しますnil

于 2012-12-27T16:53:18.513 に答える