#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. Это устраняет ошибку, и именно поэтому я считаю ее правильной, но если вы знаете, почему эта форма не создает никакой записи, просто чтобы мне не пришлось создавать еще один вопрос.