2010-07-29 1 views
3

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

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

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

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

ответ

2

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

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

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 без необходимости иметь client_id в пути.

1

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

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

Лично я прекратил читать книги после окончания «Agile Web Development with Rails». Затем я начал делать свои неудачи и учился у них.

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

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

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

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

0

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