NoMethodError 未定义的方法 FixNum - Rails 4

NoMethodError Undefined Method FixNum - Rails 4

我有一个 agent_review 模型和一个代理模型。在 agent_review table 中有一个名为 "reviewer_id" 的列,这是审查代理的代理的 ID。我在从 id 中获取审阅者的姓名时遇到问题。我希望这是有道理的。下面是相关代码。提前致谢。

代理模型

has_many :agent_reviews

Agent_Review 型号

belongs_to :agent

Agent_Reviews 控制器 - 索引方法

def index
   @agent = Agent.find(params[:agent_id])
   @agent_reviews = @agent.agent_reviews.order(created_at: :desc)
end

Agent_Review/Index

<div class="mega-container"><br>
   <div class="text-center">
      <h1>Agent Reviews</h1>
      <h3><%= @agent.name %></h3>
      <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.agent.name %></p>
               <p class="star-rating" data-score= <%= agent_review.rating %> >Rating: </p>
               <p>Review: <%= agent_review.comment %></p>
            </div><br>
         <% end %>
      </div>
    </div>
  </div>

错误

架构

create_table "agent_reviews", force: :cascade do |t|
  t.integer  "agent_id"
  t.integer  "reviewer_id"
  t.text     "comment"
  t.integer  "rating"
  t.datetime "created_at",  null: false
  t.datetime "updated_at",  null: false
end

你想做

agent_review.reviewer.name

agent_review.reviewer_id是一个int(即Fixnum),而agent_review.reviewer是你要找的对象。

agent_review.reviewer_id returns 一个整数(Fixnum)并且你不能在 Fixnum 对象上调用 name 方法。

而且您的关联存在问题,因为您没有遵循 rails 设置外键的方式。首先,您必须在 agent_review 模型中指定要用作外键的列。

# in agent_review.rb

belongs_to :agent, foreign_key: 'reviewer_id'

然后尝试

<%= agent_review.agent.name %>

从评论中检索代理人的姓名。

编辑

如果要检索有关被评论者的信息,请添加新关联 agent_review.rb

belongs_to :reviewee, class_name: 'Agent', foreign_key: 'agent_id'

现在,您可以调用 agent_review.reviewee,它将为您提供有关被评论者的信息。

您首先需要一个循环,因为 agent_review 未在控制器中定义。

<% @agent_reviews.each do |agent_review| %>
  # YOUR HTML CODE HERE
<% end %>

此外,如果那只是因为它没有包含在内,可能是因为 agent_review.reviewer_id returns 是一个数字而不是实际的 reviewer。您的联想不完整,所以您的意思是 agent_review.agent?这应该为您指明正确的方向!希望这有帮助。

你的代理模型有很多 agent_reviews,所以作为 @agent_review 传递给你的索引的实际上是一个数组,所以你需要在视图中循环遍历该数组才能访问构成该数组的各个对象。