Gem наследования таблицы классов Rails, поддельного наследования и отсутствующих методов - PullRequest
2 голосов
/ 30 января 2011

Я работаю над модификацией части существующего приложения Rails, чтобы использовать гем Class-Table-Inheritance (https://github.com/brunofrank/class-table-inheritance). Все хорошо, за исключением того, что я определил некоторые методы экземпляра в своем суперклассе - Person, который нужен всем подклассам чтобы иметь возможность доступа. Например, full_name, который возвращает объединенные имя и фамилию, или cite_name, который возвращает первое имя и фамилию. Поскольку гем CTI фактически не использует наследование Ruby (все подклассы все еще наследуется от ActiveRecord :: Base, и гем делает несколько в стиле фанк-вуду, чтобы связать поля ActiveRecord вместе), я не могу получить доступ к этим методам в подклассах, которые я создал. Любые мысли по поводу этого? Мне не интересно в STI, но я готов либо раскошелиться на этот конкретный драгоценный камень CTI, либо посмотреть на другие решения.

Ответы [ 3 ]

1 голос
/ 29 апреля 2011

try http://peterhamilton.github.com/citier, это основано на CITIEsForRAILS, я его разветвил и провел через быстрое развитие и различные другие изменения. Он исправляет большинство, если не все ошибки, которые у него были, и работает так просто.

0 голосов
/ 16 февраля 2011

Я думаю, что новый драгоценный камень CITIEsForRAILS (Class Inheritance & Table Inheritance EmbeddingSS для RAILS, см. https://github.com/altrabio/CITIEsForRAILS) делает именно то, что вы хотите.Этот драгоценный камень расширяет CTI, STI и наследование нескольких таблиц, сохраняя наследование классов Ruby.

0 голосов
/ 07 февраля 2011

Вдоль моей головы, вы видели, что в таблицах миграции ваших подклассов вам нужна строка:

create_table :videos, :inherits => :product do |t|

, а также в ваших файлах Model.rb

  class Product < ActiveRecord::Base
    acts_as_superclass # I'm guessing you might be missing this line??
  end

  class Book < ActiveRecord::Base
    inherits_from :product
  end
...