Цель
Инициализируйте новую проблему с добавлением, которую пользователи решат при посещении /task
. Они вводят свой ответ, и форма отправляется обратно /task
. Действие new
должно инициализировать проблему, поскольку пользователи не могут редактировать проблему, только предоставляют ответ. Действие create
должно обновить таблицу addition_tasks
в столбце answer
с предоставленным пользователем ответом.
Задача
Как у меня сейчас, задача создана и успешно сохранена в действии new
, но не обновляется с действием create
.
Модель
# == Schema Information
#
# Table name: addition_tasks
#
# id :integer not null, primary key
# first_addend :integer
# second_addend :integer
# sum :integer
# answer :integer
# correct :boolean
# created_at :datetime not null
# updated_at :datetime not null
#
class AdditionTask < ActiveRecord::Base
attr_accessible :answer
belongs_to :user
end
Маршруты
match 'task', to: 'addition_task#new'
match 'task', to: 'addition_task#create'
Контроллер
class AdditionTaskController < ApplicationController
respond_to :html, :js
def new
@task = AdditionTask.new
@task = new_task(@task)
@task.save
session[:task_id] = @task.id
end
def create
@task = AdditionTask.find(session[:task_id])
@task.answer = params[:addition_task][:answer]
respond_with :new
end
private
def new_task(task)
@task.first_addend = 1 + Random.rand(98)
@task.second_addend = 1 + Random.rand(98)
@task.sum = @task.first_addend + @task.second_addend
@task
end
end
View
%h1 Problem
:markdown
Please answer the question below. You may press "Enter" from within the answer field, instead of clicking the button, in order to receive a new question.
#task-container
.addend
=@task.first_addend
.operator
+
.addend
=@task.second_addend
.operator
\=
.answer
=simple_form_for @task, url: task_path, defaults: {input_html: {class: 'span2'}}, html: { class: 'form-inline' } do |f|
=f.input :answer, label: false
=f.submit :submit, class: 'btn-primary btn-large pull-right', value: 'Answer'
%div
=@task.sum