非登录用户 - Rails 4 - 设计
问题描述:
我有一个agent
模型和一个agent_review
模型。我有一些控制器逻辑,可以在该用户登录时保存代理的ID。但是,当一个未登录的用户试图离开审查时,我会得到一个NoMethodError: undefined method id for nil:NilClass
。我尝试过rescue
,无法让它工作。希望能够使未登录的agent_id
返回nil
,然后在视图中将ID为Nil的任何agent
默认为Guest。除非有更好的方法来实现这个目标。非登录用户 - Rails 4 - 设计
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>
答
我能够通过使用安全的导航操作&
,然后检查是否进入了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 %>
'current_agent'方法在哪里定义?看起来'current_agent'是'nil' –
@ arun-kumar current_agent是一个设计的东西。 –