RoR: Я не могу понять, как добавить новую запись, используя два целых числа, взятых из text_field.

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

Я считаю, что проблемы возникли из-за того, что я создал новую модель (субъекты) с использованием генерации модели вместо каркаса. Итак, я сравнивал все, что у меня есть, с моей моделью пользователей (которая работает и в основном заимствована из учебника Хартла) с моей моделью Subjects, и я ничего не могу найти.

Итак, я пытаюсь добавить новую тему с помощью команды create, но она ничего не делает. Перед переходом в индекс страница даже ведет себя так, как будто она работает. Я могу добавлять темы с консоли. Любая помощь будет принята с благодарностью.

subject_controller.rb

    class SubjectsController < ApplicationController
      def index
        @subjects = Subjects.paginate(page: params[:page])
      end

      def new
        @subject = Subjects.new
      end

      def create
        @subject  = Subjects.new(subject_params)
        if @subject.save
            flash[:success] = "Subject added to database."
          redirect_to @subject
        else
            render 'new'
        end 
      end

      def show
        @subjects = Subjects.find(params[:id])
      end

      private
        def subject_params 
          params.require(:subject).permit(:subject_id)
        end
    end

темы / new.html.erb

<div class="row">
    <div class="span6 offset3">
        <%= form_for(@subject) do |f| %>
        <!-- Look for errors -->
        <% if @subject.errors.any? %>
            <div id="error_explanation"></div>
                <h2>
                    <%= pluralize(@user.errors.count, "error") %> prohibited this subject from being saved:
                </h2>
                <ul>
                    <% @subject.errors.full_message.each do |msg| %>
                        <li><%= msg %></li>
                    <% end %>
                </ul>
            </div>
        <% end %>
        <!-- Add new subject to Subjects -->
            <p>Subject:</p>
            <%= f.text_field :subject_id %>


            <%= f.submit "Add Subject", class: "btn btn-large btn-primary" %>
        <% end %> 
    </div>
</div>

subject.rb

class Subjects < ActiveRecord::Base

  attr_accessible  :subject_id, :study_site, :treatment_group

  validates :subject_id, presence: true, length: { is: 4 }, numericality: { only_integer: true }, presence: true, uniqueness: true
  validates :study_site, presence: true, length: { is: 1 }, numericality: { only_integer: true }, presence: true
  # validates :subject_id, :study_site, :numericality => { :only_integer => true}

end

РЕДАКТИРОВАТЬ 1.

Журнал ошибок (localhost / server.log)

Запущен POST "/ subject_index" для 127.0.0.1 в 2013-11-21 11:59:51 -0800 Обработка SubjectsController # index как параметры HTML: {"utf8" => "✓", "authentication_token" => "xqE / 7CY2awqNy2E6DainqEKxU70DJ4uGr6hB8 + qSmhE = "," themes "=> {" subject_id "=>" 5001 "," study_site "=>" 3 "}," commit "=>" Добавить тему "} Нагрузка тем (0,4 мс) ВЫБРАТЬ" темы ". * FROM" subject "LIMIT 30 OFFSET 0 Обработанные темы / index.html.erb в макетах / приложении (1,9 мс) Визуализированные макеты / _shim.html.erb (0,0 мс) Пользовательская нагрузка (0,3 мс) ВЫБРАТЬ" пользователей ". * FROM "users" ГДЕ "users". "Remember_token" = '1a-UA_7SDRyrc7Pd1zKU5g' LIMIT 1 Визуализированные макеты / _header.html.erb (2,1 мс) Визуализированные макеты / _footer.html.erb (0,2 мс) Завершено 200 OK за 36,2 мс (просмотров: 35,0 мс | ActiveRecord: 0,7 мс)

Запущен GET "/assets/application.css?body=1" для 127.0.0.1 в 2013-11-21 11:59:51 -0800 Обслуживаемый актив /application.css - 304 не изменено (9 мс) [2013-11-21 11:59:51] ПРЕДУПРЕЖДЕНИЕ Не удалось определить длину содержимого тела ответа. Задайте длину содержимого ответа или установите Response # chunked = true

Решение:

На случай, если кто-то наткнется на ту же проблему. В итоге я переименовал каждую переменную в «Тема» из «Субъекты». Это вызвало несколько проблем, потому что некоторые из них на самом деле должны были быть «Субъектами». Итак, я запустил rails generate model Subject, а затем обновил новый файл миграции, а затем запустил bundle exec rake db: migrate, и теперь все, похоже, работает.

Спасибо вам за помощь!


person Ian Ellis    schedule 21.11.2013    source источник
comment
Есть ли ошибки в журнале сервера? Кроме того, модели следует называть по отдельности (Subject вместо Subjects). Это может вызвать проблемы с тем, как ActiveRecord определяет схему вашей базы данных.   -  person micahbf    schedule 21.11.2013
comment
Спасибо за ответ. В журнале сервера я вижу: 304 Not Modified ... WARN Не удалось определить длину содержимого тела ответа. Что касается темы вместо тем, порекомендуете ли вы просто откатиться и переделать модель, или есть более простой способ переименовать ее в «Тема»?   -  person Ian Ellis    schedule 21.11.2013
comment
Это не та ошибка, вы уверены, что других нет? Что касается модели, да, откат и восстановление могут быть самыми простыми. Вы можете использовать rails d model [...] с теми же параметрами, которые вы использовали для его создания, для автоматического удаления всех файлов.   -  person micahbf    schedule 22.11.2013
comment
Я не УВЕРЕН, что других нет, но и не вижу. До сих пор в обоих комментариях упоминается, что субъекты должны быть единичными, поэтому я продолжу и потрачу некоторое время на исправление этого. Еще раз спасибо.   -  person Ian Ellis    schedule 22.11.2013
comment
Проблема, похоже, в том, что форма обрабатывается действием index, а не create. Попробуйте указать url: {action: "create"} на своем form_for.   -  person micahbf    schedule 22.11.2013


Ответы (2)


Я не могу точно определить проблему, но могу порекомендовать следующее изменение, которое может решить проблему:

Переименуйте свой класс модели в Subject (единственное число).

Согласно соглашению rails, модели следует называть в единственном числе, а контроллеры - во множественном числе (SubjectsController).

Также я не уверен, нужен ли вам attr_accessible, если вы используете строгие параметры.

Можете ли вы опубликовать, какое сообщение об ошибке вы получаете? (Журнал сервера)

person wpp    schedule 21.11.2013
comment
Спасибо за ответ. Я переименовываю свою модель в Subject. Я обновил свой пост, включив в него сообщение об ошибке. На данный момент я предполагаю, что по крайней мере некоторые из моих проблем связаны с множественным именем для моего класса модели, поэтому я буду работать над исправлением этого. - person Ian Ellis; 22.11.2013
comment
Нет проблем, не забудьте посмотреть здесь инструкции по переименование модели (и не волнуйтесь, нам всем когда-нибудь придется это сделать :)) - person wpp; 22.11.2013
comment
Так что я не хочу клянчить репутацию, но если переименование решило вашу проблему, вы должны отметить ответ как правильный. - person wpp; 25.11.2013

вместо того, чтобы менять имена переменных в разных местах, вы также можете подумать об изменении пути в routes.rb

Если вы упомянули здесь: as => 'Subjects', возможно, вы получили эту ошибку. Это можно исправить, изменив все имена переменных, но это будет проще.

person Hardik    schedule 28.12.2013