首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError未定义方法FixNum - Rails 4

NoMethodError未定义方法FixNum - Rails 4
EN

Stack Overflow用户
提问于 2016-09-16 20:40:05
回答 4查看 1K关注 0票数 0

我有一个agent_review模型和一个代理模型。在agent_review表中,有一个名为"reviewer_id“的列,它是检查代理的代理的id。我在从id获取审阅者的名字时遇到了问题。我希望这是有意义的。下面是相关代码。提前谢谢。

Agent模型

代码语言:javascript
复制
has_many :agent_reviews

Agent_Review模型

代码语言:javascript
复制
belongs_to :agent

Agent_Reviews控制器-指数法

代码语言:javascript
复制
def index
   @agent = Agent.find(params[:agent_id])
   @agent_reviews = @agent.agent_reviews.order(created_at: :desc)
end

代理人审查/索引

代码语言:javascript
复制
<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>

错误

模式

代码语言:javascript
复制
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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-16 20:44:16

agent_review.reviewer_id返回一个整数(Fixnum),您不能在Fixnum对象上调用name方法。

由于您没有遵循rails设置外键的方法,所以您的关联出现了问题。首先,您必须在agent_review模型中指定用作外键的列。

代码语言:javascript
复制
# in agent_review.rb

belongs_to :agent, foreign_key: 'reviewer_id'

然后试着

代码语言:javascript
复制
<%= agent_review.agent.name %>

若要从检查中检索代理的名称,请执行以下操作。

编辑

如果要检索有关该更新的信息,请向agent_review.rb添加一个新的关联

代码语言:javascript
复制
belongs_to :reviewee, class_name: 'Agent', foreign_key: 'agent_id'

现在,你可以打电话给agent_review.reviewee,它会给你关于被审查人的信息。

票数 2
EN

Stack Overflow用户

发布于 2016-09-16 20:45:26

首先需要一个循环,因为控制器中没有定义agent_review

代码语言:javascript
复制
<% @agent_reviews.each do |agent_review| %>
  # YOUR HTML CODE HERE
<% end %>

另外,如果这仅仅是因为它不包括在内,那么可能是因为agent_review.reviewer_id返回一个数字而不是实际的reviewer。您的关联是不完整的,所以您的意思是agent_review.agent?这应该会给你指明正确的方向!希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-09-16 20:43:32

你想做什么

代码语言:javascript
复制
agent_review.reviewer.name

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39539774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档