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

結局、私はこれを別の方法でソートしました。各質問には 1 つの回答しかないため、質問に回答属性を指定して割り当てました。

投稿ページ:

...
<%= 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 に答える
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 に答える