У меня есть модель User. Теперь мне нужны все сведения об объединении от консоли. И нужно знать, является ли он одним или одним. Есть ли способ сделать это?
Получить ассоциации рельсов с консоли
Ответ 1
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
Используя gem pry-rails, вы сможете получить доступ к модели, ее столбцам и отношениям. Включите его в Gemfile
, затем запустите bundle
. Вы можете использовать команду show-models
, когда находитесь в своей подставной консоли. и вы получите информацию обо всех своих моделях.
Вы также можете запустить show-model (Model_Name)
, чтобы получить информацию о конкретной модели
Ответ 3
Поскольку я новый пользователь, я не могу уточнить/ответить на другие сообщения. Отмечу, что вам нужно перезагрузить консоль рельсов, прежде чем проверять какие-либо изменения в ассоциациях.
Ответ 4
Добавьте это, где находится под /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
Ответ 5
Вы можете сделать это для любого конкретного: - user = User.reflect_on_association (: user_profile) а также user.macro