Получить рельсовые ассоциации из консоли - PullRequest
19 голосов
/ 04 мая 2011

У меня есть модель User.Теперь мне нужны все детали ассоциаций из консоли.И нужно знать, это один-один или один-много. Есть ли способ сделать это?

Ответы [ 5 ]

39 голосов
/ 04 мая 2011
User.reflect_on_all_associations

Будет возвращен массив ассоциаций, подобный следующему:

#<ActiveRecord::Reflection::AssociationReflection:0x00000105575548 @macro=:has_many, @name=:posts, @options={}, @active_record=User(id: integer, login: string), @collection=false>

Пример кода:

reflections = User.reflect_on_all_associations
reflections.each do |reflection|
  puts ":#{reflection.macro} => :#{reflection.name}"
end
2 голосов
/ 19 августа 2016

Используя gem pry-rails , вы сможете получить доступ к модели, ее столбцам и взаимосвязям. Включите его в ваш Gemfile, затем вы запустите bundle. Вы можете использовать команду show-models, когда находитесь в консоли. и вы получите информацию обо всех ваших моделях.

Вы также можете запустить show-model (Model_Name), чтобы получить информацию о конкретной модели

0 голосов
/ 13 июля 2016

Вы можете сделать это для любого конкретного: - user = User.reflect_on_association (: user_profile) а также user.macro

0 голосов
/ 18 октября 2013

Добавьте это где-нибудь в / lib.Например, clone_deep.rb.

module CloneDeep
  def clone_deep
    kopy = clone
    self.class.reflect_on_all_associations.each do |association|
      next if association.macro == :belongs_to
      cloned_object = case association.macro
                        when :has_many
                          self.send(association.name).collect { |item| item.clone_deep }
                        when :has_one
                          self.send(association.name) && self.send(association.name).clone_deep
                        else
                          clone
                      end
      kopy.send("#{association.name}=", cloned_object)
    end
    return kopy
  end
end

Создать новый инициализатор в папке config / initializers /.Внутри этого файла вставьте

ActiveRecord::Base.send(:include, CloneDeep)

Теперь вы можете клонировать модель со всеми ее ассоциациями has_one и hos_many.

cloned_person = person.clone_deep
cloned_person.save
0 голосов
/ 20 сентября 2012

Поскольку я новый пользователь, я не могу уточнить / ответить на сообщения других пользователей. Отмечу, что вам необходимо перезагрузить консоль rails перед проверкой любых изменений в ассоциациях.

...