2014-10-03 3 views
-1

У меня есть таблица рабочих пользователей. Я создал новую таблицу, используя:Rails: ссылка на новую ошибку металирования модели

rails generate model quiz_answers 

..и запустить грабли DB: перенастройки

Мой файл CreateQuizAnswers миграции выглядит следующим образом:

class CreateQuizAnswers < ActiveRecord::Migration 
    def change 
    create_table :quiz_answers do |t| 
     t.references :user, index: true 
     t.string :answer1 
     t.string :answer2 
     t.string :answer3 
     t.string :answer4 
     t.string :answer5 
     t.string :answer6 
     t.string :answer7 
     t.string :answer8 

     t.timestamps 
    end 
    end 
end 

У меня есть модель quiz_answer:

class QuizAnswer < ActiveRecord::Base 
    belongs_to :user 
end 

и QuizAnswersController:

class QuizAnswersController < ApplicationController 
    def new 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 

    private 

    def post_params 
     params.require(:quiz_answer).permit(:body, :user_id) 
    end 
end 

Я добавил: quiz_answers как ресурс в routes.rb

Edited вопрос:

Почему, тогда, когда я пытаюсь создать форму (с помощью Завещание) я получить ошибку «неопределенный метод« тело »для ... (со ссылкой на QuizAnswer здесь)»? У меня есть еще одна модель «Почта», которая не генерирует эту ошибку и не имеет атрибута «тело».

страница, где я пытаюсь построить форму является домом/whattypeofleader.html.erb и, в routes.rb у меня есть:

get "whattypeofleader" => "home#whattypeofleader" 

И в моем HomeController у меня есть:

class HomeController < ApplicationController 
    def index 
    end 

    def whattypeofleader 
     @user = current_user 
     @quiz_answer = current_user.quiz_answer.build 
    end 
end 

Что я делаю неправильно? Любая помощь отчаянно ценилась, спасибо.

О, и в случае, если вам это нужно, вот код формы, частично, что получает «оказывается» в whattypeofleader:

<%= form_for([current_user, @quiz_answer]) do |f| %> 
    <p> 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 
    </p> 
    <p> 
    <%= f.submit("Save entry") %> 
    </p> 
<% end %> 
+2

Вы добавили has_many в пользовательскую модель? – Mandeep

+0

У меня есть has_many: quiz_answers у пользователя.гь – moosefetcher

+3

@moosefetcher, то вы хотите 'current_user.quiz_answers.build' - pluralised –

ответ

0
<%= form_for([current_user, @quiz_answer]) do |f| %> 
    #... 
    <%= f.text_area :body, :autofocus => true , :class => "elearning-input"%> 

Вы создаете text_area здесь, и вы говорите рельсы привяжите этот ввод текстовой области с атрибутом @quiz_answer.body. Зачем?

form_for присваивает последний элемент массива как объект формы. Он дает объект построения формы (f), который сохраняет ссылку на этот объект (f.object). Все поля, созданные с помощью этого построителя форм, автоматически заполняются значением f.object.send(:field_name) (он также задает имя полей, поэтому параметры могут быть легко сопоставлены при его публикации). Это волшебство рельсов, создающее все поля формы, заполненные данными модели.

Поскольку ваша модель не имеет body атрибут (нет такого столбца в базе данных и не метод с этим именем, определенным), f.object.send(:body) бросает ошибку method undefined.

Что касается исправления, вам необходимо решить, как эта форма должна искать. Ваши модели содержат 8 столбцов, answer<i> (что вызывает беспокойство и предполагает, что вы можете использовать ассоциацию здесь).

+0

Я скопировал этот код формы из рабочей версии, у меня есть «сообщения». Я использовал f.text_area как тест, так как он работает в случае с сообщениями. Я понимаю, что f является FormBuider - я полностью понимаю ООП. Я хочу понять предполагаемую магию рельсов. Почему «сообщение» имеет доступ к: телу (несмотря на отсутствие атрибута body) и «quiz_question» нет? Почему «беспокоит», что моя таблица содержит 8 столбцов? ПОЖАЛУЙСТА, объясните - я добираюсь до конца моего троса с этим. Благодарю. – moosefetcher

+0

@moosefetcher - Почему вы говорите, что 'posts' не имеет атрибута body? Не могли бы вы опубликовать свою схему для таблицы сообщений, а также в качестве модели сообщений? – BroiSatse

+0

OK - 'post' имеет атрибут body, определенный в файле миграции, который для меня является новостью. Спасибо, что указали мне на этот файл. Мне кажется, мне нужно задать новый вопрос: как должна работать таблица quiz_answers. Еще раз спасибо. – moosefetcher

Смежные вопросы