Расширение модельного класса - PullRequest
0 голосов
/ 04 февраля 2012

Я создаю механизм аутентификации.Он имеет встроенную модель User, которая содержит некоторую базовую информацию.Я хочу, чтобы сделать возможным его расширение извне движка (из родительского приложения).Например, чтобы добавить некоторые отношения has_many.Мне почти удалось сделать это, создав:

#host_app/app/models/my_user.rb
calss MyUser < User
   has_many :comments

Я думал, что это так, но появилась другая проблема.В моем движке в режиме просмотра пользователей я создаю дополнительный фрагмент, который должен быть в host_app/app/views/shared/_partial_to_add.html.erb Я также передаю @user.Это должно позволить мне добавить некоторую дополнительную информацию о пользователе (например, список комментариев, которые он написал или что-то еще), не затрагивая сам движок.Но оказывается (что совершенно очевидно), что этот @user почти бесполезен, потому что у него нет новых методов из класса MyUser.

Есть идеи, как это исправить?

1 Ответ

1 голос
/ 04 февраля 2012

В Ruby есть открытые классы. Если вы хотите расширить модель User вашего движка, вы можете сделать это из родительского приложения:

User.class_eval do
  has_many :comments
end

(при этом используется class_eval, чтобы Rails автоматически загружал файл, определяющий пользователя , перед проверкой этого кода.) Поместите это в файл, который будет загружаться, когда это сделает приложение; или поместите это в config / initializers /, или поместите это в lib / и require it.

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