Несколько таблиц в одной миграции в рельсах - как назвать - PullRequest
2 голосов
/ 02 декабря 2011

рельсы, насколько я понимаю, предоставляют всевозможные преимущества, если вы будете следовать соглашениям об именах.Таким образом, в только что созданной модели Expect я также получил все одноименные представления и контроллеры, а в миграции

class CreateExpects < ActiveRecord::Migration
  def self.up
    create_table :expects do |t|

отмечу, что она автоматически создает таблицу «ожидает» в этой миграции, иЯ предполагаю, что некоторые выгоды вытекают из этого.Однако, что если я хочу создать несколько таблиц в этой миграции

Например, я создаю очень простое приложение, в котором студентам задают два вопроса,

The students will be asked two questions on a form

"Which courses do you think students will likely fail?" (Check all that apply)
Math, English, French, Science

"Which courses do you think students will likely pass?" (check all that apply)
Math, English, French, Science

, но предложения от людейдля структурирования базы данных необходимо создать несколько таблиц, и, поскольку таблицы также будут иметь разные имена, как мне справиться с тем фактом, что я больше не подчиняюсь соглашениям rails

Например, если двавопросы задаются в одной форме, которая находится в views / expected / new.html.erb (и _form), как мне убедиться, что данные попадают в правильную таблицу для каждого вопроса?а затем вытащите все это вместе на другой странице, где я показываю данные?

1 Ответ

1 голос
/ 02 декабря 2011

Не думаю, что я полностью понимаю, о чем вы спрашиваете, но я думаю, что могу помочь вам просто исходя из вашей проблемы.Вот как должна выглядеть ваша база данных.

  1. Создайте таблицу с именем student.Вы можете использовать команду создания модели.

    Рельсы Генерация модели студента

  2. Перейдите в папку миграции (db / migrate) и найдите файл миграции студента.

  3. Добавьте эти строки в файл миграции.Обратите внимание, что вы могли бы использовать некоторую связь между студентом и предметами для настройки базы данных, но для такого простого приложения, как это, я бы не стал беспокоиться.

    t.boolean: firstanswer_math
    t.boolean:firstanswer_english
    t.boolean: firstanswer_french
    t.boolean: firstanswer_science
    t.boolean: secondanswer_math
    t.boolean: secondanswer_english
    t.boolean: secondanswer_french
    1023: tsc1024 *

  4. В представлении установите флажок для каждого вопроса для каждого вопроса.

    ПЕРВЫЙ ВОПРОС
    <% = form.check_box: firstanswer_math =>
    <% = form.check_box: firstanswer_english =>
    ...

  5. Конечно, вам понадобятся соответствующие методы в файле контроллера для студента, но я опущуэтот шаг.

Сообщите мне, правильно ли я ответил на ваш вопрос.


Первое редактирование

  • Я могу позвонить student.firstanswer_math, но не могуll firstanswer_math.student Знаете ли вы, как я настроил бы миграции для создания такого типа обратимой гибкости вызова метода?

Такой гибкости нет.Вы должны пойти в этом порядке, object.attribute .

  • мне нужен has_many_through?

Нет, вы должны быть найдены без него.Вам нужен тип связи has_many, когда вы хотите связать две модели с двумя разными таблицами базы данных.В нашем случае приложение может быть легко настроено на одну модель и несколько атрибутов.Так что иметь одну таблицу - это прекрасно.

  • , хотя вы можете и не подумать, что она идеально подходит для целей этого простого приложения, так как я учусь, мне интересно, если использовать более сложную структуру, которая позволяетвызов student.firstanswer_math и firstanswer_math.student может дать мне больше гибкости в отношении данных, которые я обрабатываю и представляю различными способами.

Думаю, теперь я понимаю, почему вы вызываете "firstanswer_math.student".Вы пытаетесь найти студентов, для которых firstanswer_math имеет значение true или что-то еще?Если вы хотите сделать это, вы можете использовать метод find на ученика.Так, например,

@students = Student.find_all_by_firstanswer_math( true )
  • Я все еще изучаю рельсы, поэтому я просто играю, но если вы можете предложить лучшую структуру (первая рекомендация очень хорошая) для этого более сложного наборавверх, тогда, пожалуйста, сделайте

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...