Вопрос по самым основам Rails. Дополнение/изменение моделей из gem'ов.

98 views
Skip to first unread message

Dmitry Grach

unread,
Mar 21, 2013, 3:04:51 AM3/21/13
to ror...@googlegroups.com
Возьму к примеру spree_auth_devise. Там создается модель User < ActiveRecord::Base
В ней есть
attr_accessible :email, :password, :password_confirmation, :remember_me, :persistence_token, :login
Так вот, как к этому всему добавить еще и phone_number ? Или какой-то другой параметр. Вообще, как дополнять и изменять то, что подключается с гемами? В голову приходит только переписывание нужных файлов с их путями в геме в самом приложении. С вьюхми так работает. ( про дефейс знаю, но имею дурацкие повадки после регулярных в прошлом соитий с Drupal ). А как грамотно и по человечески поступать с контролерами и моделями из гемов?
И еще нюанс. Я правильно понял, что при работе содержимое гемов "накладывает" на приложение? то есть структура папок и файлов всех гемов сливается в одно, и сверху еще накладывается приложение. Нэ? Ну как бы абстракция такая... и в приложении можно переписать любой гема, и он будет использоваться вместо гемовского?
Готового ответа найти не смог. В книжках тоже. И все это пока совсем не является для меня очевидным. Так что потраченные вами 5-10 минут на подробный ответ, могут спасти мне много часов самостоятельных поисков и вкуривания. Мне нужно только в общих чертах представление о механике подключения кода из гемов и взаимодействия с ним. Заранее очень признателен за разъяснение!! )

Andrey Velikoredchanin

unread,
Mar 21, 2013, 3:10:28 AM3/21/13
to ror2ru
Такие гемы обычно имеют свое пространство имен. Соответственно для изменения модели и/или вьюхи гема надо ложить их не в обычное место в приложении, а в подкаталог с именем гема (обычно).


21 марта 2013 г., 11:04 пользователь Dmitry Grach <dmitr...@gmail.com> написал:
--
--
--
Данное сообщение отправлено Вам, так как Вы являетесь подписчиком группы "RubyOnRails to russian" на группах Google.
FAQ группы находится по адресу: http://ru.wikibooks.org/wiki/RubyFAQ
 
Для того, чтобы отправить сообщение в эту группу, пошлите его по адресу
ror...@googlegroups.com
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу: ror2ru-un...@googlegroups.com
Дополнительные варианты находятся на странице группы http://groups.google.com/group/ror2ru?hl=ru
---
Вы получили это сообщение, поскольку подписаны на группу RubyOnRails to russian.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес ror2ru+un...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 

Сергей Соколов

unread,
Mar 21, 2013, 3:45:01 AM3/21/13
to ror...@googlegroups.com
Создайте в config/initializers файл, в котором напишите:
module Spree
  class User < ActiveRecord::Base
attr_accessible :phone_number
end
end
Если не поможет можно еще попробовать так:
module Spree
  User.module_eval do
attr_accessible :phone_number
end
end

По идее в случае spree_auth_devise можно даже модуль не писать, поскольку он не изолирован.


21 марта 2013 г., 10:10 пользователь Andrey Velikoredchanin <uncle...@gmail.com> написал:

Dmitry Grach

unread,
Mar 21, 2013, 3:47:41 AM3/21/13
to ror...@googlegroups.com
Сергей, огромное спасибо! Именно такой ответ мне был нужен! Но все же несколько походит на костыль... хотя, это лучше чем полностью замещать файлы модели... спасибо :)

Сергей Соколов

unread,
Mar 21, 2013, 3:52:09 AM3/21/13
to ror...@googlegroups.com
На костыль похоже, потому что гем так сделан. Они вполне могли бы добавлять функционал к твоей модели, а не создавать свою. Пример - authlogic

21 марта 2013 г., 10:47 пользователь Dmitry Grach <dmitr...@gmail.com> написал:
Сергей, огромное спасибо! Именно такой ответ мне был нужен! Но все же несколько походит на костыль... хотя, это лучше чем полностью замещать файлы модели... спасибо :)

--

Dmitry Grach

unread,
Mar 21, 2013, 4:28:17 AM3/21/13
to ror...@googlegroups.com
То есть, я так понимаю, все файлы *.rb в config/initializers будут подхватываться и подключаться, даже если это abrahadabra.rb ? 

Сергей Соколов

unread,
Mar 21, 2013, 4:32:11 AM3/21/13
to ror...@googlegroups.com
Да, от названия ничего не зависит.

21 марта 2013 г., 11:28 пользователь Dmitry Grach <dmitr...@gmail.com> написал:
То есть, я так понимаю, все файлы *.rb в config/initializers будут подхватываться и подключаться, даже если это abrahadabra.rb ? 

--

Dmitry Grach

unread,
Mar 21, 2013, 5:02:33 AM3/21/13
to ror...@googlegroups.com
Спасибо, Сергей. А что если я хочу убрать какой-то параметр из представленных в геме, или отключить какую-то валидацию? Как примерно это может выглядеть? 

Сергей Соколов

unread,
Mar 21, 2013, 5:10:29 AM3/21/13
to ror...@googlegroups.com
Про удаление валидаций вот тут хорошо написано - http://stackoverflow.com/questions/7545938/how-to-remove-validation-using-instance-eval-clause-in-rails. Методы можно просто игнорировать. 
Но в целом предполагается, что все валидации внутри гема нужны для его функционирования и удалять их не надо.

21 марта 2013 г., 12:02 пользователь Dmitry Grach <dmitr...@gmail.com> написал:
Спасибо, Сергей. А что если я хочу убрать какой-то параметр из представленных в геме, или отключить какую-то валидацию? Как примерно это может выглядеть? 

--

ishe

unread,
Mar 21, 2013, 5:53:36 AM3/21/13
to ror...@googlegroups.com
очень полезно привыкнуть смотреть исходники гемов.
Reply all
Reply to author
Forward
0 new messages