Ошибка NoMethodError в ответах#новое

#ruby-on-rails

#ruby-на-рельсах #ruby-on-rails

Вопрос:

Я получаю эту ошибку, когда я перехожу к /questions/1/answers/new маршруту в моем проекте. Изображение ошибки

В нем говорится, что я пытаюсь вызвать какую-то функцию, которая не существует, но я вообще не вызываю никаких функций.

Вот new.html.erb для этой формы:

 <h1>Write answer to question: <%= @question.title %></h1>

<%= form_for @answer do |f| %>
    <%= f.label :description %>
    <%= f.text_area :description %>
    <%= f.submit %>
<% end %>
  

Вот answers_controller.rb :

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

def create 
    @answer = Answer.new(answer_params)
    @answer.user = current_user
    @answer.save
end

private 
    def answer_params
        params.require(:answer).permit(:id, :description, :question_id)
    end
end
  

Вот routes.rb :

 Rails.application.routes.draw do
  devise_for :users
  resources :questions do
    resources :answers
  end
  resources :users
  # For details on the DSL available within this file, see 
  http://guides.rubyonrails.org/routing.html
  root "pages#welcome"
end
  

Я застрял на этой ошибке и не могу идти дальше, поэтому помощь была бы очень признательна.

Комментарии:

1. Попробуйте <%= form_for [@question, @answer] do |f| %> . Предполагая, что это сработает, я напишу ответ с объяснением.

2. Похоже, это может сработать, просто сейчас мне нужно сделать кое-что еще, поэтому, когда я вернусь, я попробую это и дам вам знать.

Ответ №1:

Посмотрите на эту документацию, вы получите больше представления.

Для частичных элементов и форм становится сложнее. Обратите внимание на квадратные скобки:

 <%= form_for  [@question, @answer] do |f| %>
  

Самое главное, если вам нужен URI, вам может понадобиться что-то вроде этого:

 question_answer_path(@question, @answer)
  

В качестве альтернативы:

  [@question, @answer]
  

Комментарии:

1. Это устраняет ошибку, и именно поэтому я считаю ее правильной, но если вы знаете, почему эта форма не создает никакой записи, просто чтобы мне не пришлось создавать еще один вопрос.