модель рельсов с использованием иерархии классов из внешнего драгоценного камня? - PullRequest
0 голосов
/ 25 мая 2010

Я работаю над проектом, в котором модель данных:

  • реализовано в отдельном геме
  • не использует ни ActiveRecord, ни хранилище реляционных баз данных (на самом деле он полагается на couchdb)
  • использует пространства имен
  • интенсивно использует наследование классов

Чтобы упростить схему, допустим, у нас есть следующий корневой класс:

module Marketplace
 module Food
  class Fruit
  …
  end
 end
end

И пара специализированных классов:

module Marketplace
 module Food
  class Peach < Marketplace::Food::Fruit
  …
  end

  class Tomato < Marketplace::Food::Fruit
  …
  end
end

конец

Я бы хотел, чтобы Rails отображал (и управлял) всеми фруктами, независимо от их природы, без изменения модели, которая отлично работает из Rails.

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

Так что, если я представлю Apple, в таблице с действиями show / delete, rails будет искать методы с именем marketplace_food_apple_path и аналогичные, которые, конечно, не существуют.

Есть ли способ указать структуре ActionView :: Base, что Apple - это фрукт?

Я бы ожидал, что это базовое приведение будет тривиальным для фреймворка на основе Ruby, но кажется, что этот простой пример объектно-ориентированной модели не работает с Rails?

Как вы управляете моделями данных «сложных объектов» в рельсах?

Или это просто выходит за рамки Rails?

Спасибо за любые указатели!

Ответы [ 2 ]

0 голосов
/ 11 июня 2010

http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/ <- вероятно, то, что вы хотите, если только вы не хотите спорить о единственном наследовании или множественном наследовании. </p>

0 голосов
/ 11 июня 2010

ОК, как я вижу, есть много полезных ответов;).

Это в основном подтверждает мои сомнения в Rails, которые я нахожу больше похожими на VB: легкие в освоении, приятные для мелочей (покупки или сайты сообщества), но очень ограниченные.

Rails полностью выходит за рамки, когда дело доходит до обработки сложной бизнес-логики и данных!

Поскольку Rails 3.0, похоже, тоже не является решением (хорошо, у нас есть несколько ORM, но мы все еще не можем использовать наследование в модели), я переключился на Ramaze , небольшую структуру, которая предположения о том, как организованы данные, что делает их пригодными практически для любых веб-потребностей.

Если вы сталкиваетесь с ограничениями моделей в Rails, возможно, вам следует забыть о Rails и проверить Ramaze!

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