2016-11-15 5 views
0

私はagentモデルとagent_reviewモデルを持っています。そのユーザーがログインしているときにエージェントのIDを保存するコントローラロジックがいくつかありますが、ログインしていないユーザーがレビューを残そうとすると、NoMethodError: undefined method id for nil:NilClassが表示されます。私はrescueを試して、それを動作させることができませんでした。期待されているのは、ログに記録されていないagent_idの返信をnilにし、IDがNilのagentをデフォルトでGuestに設定することです。この目標を達成するためのよりよい方法がない限り。ログインしていないユーザーの扱い - Rails 4 - Devise

agent_reviews_controller:

def create 
    @agent_review = AgentReview.new(agent_review_params) 
    @agent_review.reviewer_id = current_agent.id 

    respond_to do |format| 
    if @agent_review.save 
     AgentReviewMailer.agent_review_message(@agent_review, @agent).deliver_later 
     format.html { redirect_to agent_agent_reviews_path, notice: 'Agent review was successfully created.' } 
     format.json { render :show, status: :created, location: @agent_agent_review } 
    else 
     format.html { render :new } 
     format.json { render json: @agent_review.errors, status: :unprocessable_entity } 
    end 
    end 
end 

index.html.erb:

<div class="container feedback-index"> 
    <% @agent_reviews.each do |agent_review| %> 
     <div class="row feedback-strip"> 
     <p>Submitted: <%= agent_review.created_at.strftime('%D @ %I:%M %p') %></p> 
     <p>Name: <%= agent_review.reviewer.name %></p> 
     <p class="star-rating" data-score= <%= agent_review.rating %> >Rating: </p> 
     <p>Review: <%= agent_review.comment %></p> 
     </div><br> 
    <% end %> 
    </div> 
+0

「current_agent」メソッドはどこに定義されていますか? 'current_agent'が' nil'のように見えます –

+0

@ arun-kumar current_agentは賢明なことです。 –

答えて

0

私は、エントリがnilした場合、安全なナビゲーション演算子&を使用して、チェックすることにより、この問題を解決することができました。そうであれば、ビューには何か違うものが表示されます。

def create 
    @agent_review = AgentReview.new(agent_review_params) 
    @agent_review.reviewer_id = current_agent&.id 
end 

<% if agent_review.reviewer_id.nil? %> 
    <p>Name: Guest User</p> 
<% else %> 
    <p>Name: <%= agent_review.reviewer.name %></p> 
<% end %> 
関連する問題