Насколько сложными могут быть модели Rails? примеры проектов? - PullRequest
3 голосов
/ 29 июля 2010

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

Например, я прочитал, что вы должны быть осторожны с «Вложенными маршрутами» и не должны углубляться более чем на 2. Что происходит в такой ситуации?

  • Клиент может разместить много заказов
  • В заказах может быть много предметов
  • Элементы могут иметь различные типы параметров
  • Каждый тип Опциона может иметь ограничения: доступен в определенные дни, требует выбора или влияет на общую стоимость и т. Д.

Это поручение дураков или простые вещи для Rails. Я предполагаю последнее, но не могу найти каких-либо интересных примеров проектов (источник), чтобы учиться? Книги, кажется, останавливаются на основах ... идеи?

Ответы [ 3 ]

2 голосов
/ 29 июля 2010

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

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

Customer::BaseController < ApplicationController
CustomerController < CustomerController:: BaseController

Customer::Orders::BaseController < Customer::BaseController
Customer::OrdersController < Customer::Orders::BaseController

Customer::Orders::Items::BaseController < Customer::Orders::BaseController
Customer::Orders::ItemsController < Customer::Orders::Items::BaseController

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

class Customer::BaseController < ApplicationController
  before_filter :load_customer

protected
  def load_customer
    @customer = Customer.find(params[:customer_id] || params[:id])
  rescue ActiveRecord::RecordNotFound
    render(:partial => 'customer_not_found', :layout => 'application', :status => :not_found)
  end
end

Как вы видите, это может немного запутаться, если вы наметите свое приложение таким образом. У тебя тоже очень длинные маршруты.

Если ваша база данных спроектирована так, что записи являются довольно автономными, и от них может быть извлечено много информации о взаимоотношениях, то вам не обязательно идти ко всем этим неприятностям. Страница заказа может содержать ссылки на @ order.customer без указания customer_id в пути.

1 голос
/ 03 августа 2010

Хм, я согласен с вами, что многие книги начинаются и заканчиваются основами.

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

Лично я перестал читать книги после окончания "Agile Web Development с Rails". Затем я начал делать свои собственные ошибки и учиться у них.

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

Честно говоря, бои, с которыми я сталкивался с проблемами на моем пути, не были связаны с теоретическим сценарием, найденным в книгах. Мне пришлось сесть, отследить проблему, прочитать следы, подумать о них, поискать похожие проблемы в Google, написать тесты ... Это то, что действительно помогло мне получить опыт.

Иди туда и найди или развей идею. Если он у вас есть, напишите тесты и попробуйте реализовать его. Это даст вам импульс, который вы, возможно, ищете.

Примечание: http://github.com - это отличное место, где можно найти исходный код, на который можно посмотреть и извлечь уроки.

0 голосов
/ 04 августа 2010

Взгляните на opensourcerails.com - найдите интересующее вас приложение, возьмите источник и изучите его по частям. Запустите его локально, найдите интересную функциональность, затем зайдите в код и посмотрите, как это делается.

...