简体   繁体   English

处理未登录的用户-Rails 4-设计

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM