0

我一直在关注这个,在必要时进行修改。

我有 和 的等价@post@comment。我的评论是“问题”。我已经尝试过再次遵循这个程序,但只关注评论(而不是帖子)。如果您愿意,可以对评论发表评论,这些是对问题的回答/回复。

我没有成功地让它发挥作用。

undefined method 'answers' for nil:NilClass` 

是作为评论的一部分呈现的错误,answers/_form.html.erb而评论又被呈现为我的等效帖子的一部分。

<%= form_for([@question, @question.answers.build]) do |f| %>是引发异常的行。我在想问题是@question由于某种原因没有被赋予价值?

那个或我的路线文件不正确(至少我猜是这样)。

resources :posts-equivalent do
 ...
 resources :questions
end

resources :questions do
 resources :answers
end

这让我一整天都难过- 任何想法都会受到赞赏。如果您想查看更多代码,请发表评论,我会在此处更新。

附加代码:

错误信息:

Showing .../app/views/answers/_form.html.erb where line      #1 raised:

undefined method `answers' for nil:NilClass
Extracted source (around line #1):

1: <%= form_for([@question, @question.answers.build]) do |f| %>

答案控制器:

class AnswersController < ApplicationController
 def create
  @question = Question.find(params[:question_id])
  @answer = @question.answers.create(params[:answer])
  redirect_to concept_path(@question.concept)
 end
end
4

2 回答 2

0

看起来您的 AnswersController 没有为 @question 实例变量赋值。目前尚不清楚您正在运行什么操作,但我假设它是新的或根据您拥有表单的事实进行编辑。在这些操作中你应该有这样的东西:

class AnswersController < ApplicationController
  def new
    @question = Question.find(params[:question_id])
    @answer = @question.answers.new
  end

  def edit
    @question = Question.find(params[:question_id])
    @answer = @question.answers.find(params[:id])
  end
end

然后,您可以在 new 和 edit 之间共享一个表单:

<%= form_for([@question, @answer]) %>
于 2013-02-02T19:43:30.707 回答
0

最后,我以不同的方式对此进行了排序。每个问题只会有一个答案,所以我只是给问题一个答案属性并分配它。

在帖子页面上:

...
<%= render @questions %>
<%= render "questions/form" %>
...

在 _form.html.erb 中

<%= form_for([@concept, @concept.question.build]) do |f| %>
 <%= f.hidden_field :contributor_id, :value => session[:contributor_id] %>
 <div class="field">
  <%= f.text_field :question, :placeholder => "Follow-up Question" %>
 </div>
<% end %>

在 _question.html.erb

<%= form_for(question) do |f| %>
 <div id="question">
 "<%= question.question %>" asked by <%= question.contributor.email %> | <%= question.created_at %>. 
<div id="answer">
 - Answer: <%= question.answer %>
 <%= f.text_field :answer, :placeholder => "Respond..." %>
 </div>
 </div>
<% end %>

将此添加到问题控制器:

def update
 @question = Question.find(params[:id])
 @question.update_attributes(params[:question])

 @concept = Concept.find(@question.concept.id)
 redirect_to concept_path(@concept)
end

这对我有用,我知道这不是我最初要求的,但它解决了我的问题。感谢那些试图提供帮助的人。

于 2013-02-07T13:42:12.273 回答