[英]Handling Non Logged In user - Rails 4 - Devise
I have an agent
model and an agent_review
model. 我有一个
agent
模型和一个agent_review
模型。 I have some controller logic that will save an agent's ID when that user is logged in. However, when a non-logged in user tries to leave a review I get a NoMethodError: undefined method id for nil:NilClass
. 我有一些控制器逻辑,该逻辑将在该用户登录时保存代理的ID。但是,当非登录用户尝试发表评论时,我会收到
NoMethodError: undefined method id for nil:NilClass
。 I have tried rescue
and couldn't manage to get that to work. 我已经尝试过
rescue
,但无法设法使它正常工作。 The hope is to be able to have the non-logged in agent_id
return nil
and then any agent
with an ID of Nil default to Guest in the view. 希望能够使未登录的
agent_id
返回nil
,然后在视图中将ID为Nil的任何agent
默认为Guest。 Unless there is a better way to accomplish this goal. 除非有更好的方法来实现此目标。
agent_reviews_controller: 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: 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>
I was able to fix this by using the safe navigation operator &
and then checking if the entry was nil
. 我能够通过使用安全的导航操作符
&
来解决此问题,然后检查输入是否为nil
。 If so, the view would show something different. 如果是这样,则视图将显示不同的内容。
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 %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.