Rails:nil:NilClass 的未定义方法
Rails: undefined method for nil:NilClass
这可能是一个简单的问题,但我想不通。
型号Question
有多个型号Answer
,它们都属于型号User
。
这是index.erb.html
的一部分:
<tbody>
<% @questions.each do |question| %>
<tr>
<td><%= question.content %></td>
<%= time_ago_in_words(question.created_at) %> ago by <%= question.user.email %>
<td><%= link_to 'Show', question %></td>
<td><%= link_to 'Edit', edit_question_path(question) %></td>
<td><%= link_to 'Destroy', question, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% if question.answers %>
<h4>Answers</h4>
<% @question.answers.each do |answer| %>
<p>
<%= answer.content %>
</p>
<% end %>
<% end %>
<br>
<p>Add Answers</p>ww
<%= form_for([question,question.answers.build]) do |f| %>
<%= f.text_area :content %>
<%= submit_tag "Add" %>
<br>
<% end %>
</tr>
<% end %>
</tbody>
我用seed.rb
插入数据
这里是seed.rb
User.destroy_all
Question.destroy_all
Answer.destroy_all
user = User.create(email: "123@gmail.com", password: "2wsx1qaz")
q = Question.create(content: "Q1", user: user)
#q2 = Question.create(content: "Q2", user: user)
Answer.create(content: "answer1", question: q, user: user)
Answer.create(content: "answer2", question: q, user: user)
但是它抛出了这个错误
我也把这个项目放在github
更新
出现上述错误后,渲染结果很奇怪。
它应该显示问题,然后检查该问题是否有任何答案。如果有,显示答案。
但是,我浏览器上的结果是这样的
但是,我希望它应该是这样的
您没有定义 @question
,所以它是 nil
,这就是为什么您在调用时得到:undefined method answers for nil:NilClass
:
@question.answers
您实际上已经定义了 question
。所以,使用那个:-)
改变这个:
<% @question.answers.each do |answer| %>
收件人:
<% question.answers.each do |answer| %>
我认为这行不正确
<%= time_ago_in_words(question.created_at) %> ago by <%= question.user.email %>
它在 table 数据之外,因此请将其放在您的 <td>
子句中。您的答案也不在任何 table 数据中,因此请以 table 的正确格式输入。
有关在 html #table 中呈现 table 的更多信息。所以打扰了你的 UI 部分。
这可能是一个简单的问题,但我想不通。
型号Question
有多个型号Answer
,它们都属于型号User
。
这是index.erb.html
的一部分:
<tbody>
<% @questions.each do |question| %>
<tr>
<td><%= question.content %></td>
<%= time_ago_in_words(question.created_at) %> ago by <%= question.user.email %>
<td><%= link_to 'Show', question %></td>
<td><%= link_to 'Edit', edit_question_path(question) %></td>
<td><%= link_to 'Destroy', question, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% if question.answers %>
<h4>Answers</h4>
<% @question.answers.each do |answer| %>
<p>
<%= answer.content %>
</p>
<% end %>
<% end %>
<br>
<p>Add Answers</p>ww
<%= form_for([question,question.answers.build]) do |f| %>
<%= f.text_area :content %>
<%= submit_tag "Add" %>
<br>
<% end %>
</tr>
<% end %>
</tbody>
我用seed.rb
插入数据
这里是seed.rb
User.destroy_all
Question.destroy_all
Answer.destroy_all
user = User.create(email: "123@gmail.com", password: "2wsx1qaz")
q = Question.create(content: "Q1", user: user)
#q2 = Question.create(content: "Q2", user: user)
Answer.create(content: "answer1", question: q, user: user)
Answer.create(content: "answer2", question: q, user: user)
但是它抛出了这个错误
我也把这个项目放在github
更新
出现上述错误后,渲染结果很奇怪。
它应该显示问题,然后检查该问题是否有任何答案。如果有,显示答案。
但是,我浏览器上的结果是这样的
但是,我希望它应该是这样的
您没有定义 @question
,所以它是 nil
,这就是为什么您在调用时得到:undefined method answers for nil:NilClass
:
@question.answers
您实际上已经定义了 question
。所以,使用那个:-)
改变这个:
<% @question.answers.each do |answer| %>
收件人:
<% question.answers.each do |answer| %>
我认为这行不正确
<%= time_ago_in_words(question.created_at) %> ago by <%= question.user.email %>
它在 table 数据之外,因此请将其放在您的 <td>
子句中。您的答案也不在任何 table 数据中,因此请以 table 的正确格式输入。
有关在 html #table 中呈现 table 的更多信息。所以打扰了你的 UI 部分。