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>
「current_agent」メソッドはどこに定義されていますか? 'current_agent'が' nil'のように見えます –
@ arun-kumar current_agentは賢明なことです。 –