2011-05-04 151 views
19

我有一个模型用户。现在,我需要来自控制台的所有关联细节。 并需要知道它是一个人还是一个人。是否有任何方法可以做到这一点?从控制台获取导轨关联

回答

36
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 
+0

Thanks.This是为我工作的信息。 :D:D – shajin 2011-05-04 14:21:04

+1

只是为了澄清,它不适用于模型的实例。它适用于模型类。我实际上需要关联记录的所有细节,而不是模式级别。 – 2016-11-09 19:24:37

0

因为我是新用户,我无法弄清楚/回复到其他人的帖子。我会注意到,在检查关联中的任何更改之前,您需要重新加载rails控制台。

0

添加这个一些在/ 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

你可以为任何特定的做到这一点: - 用户= User.reflect_on_association(:user_profile) 和 user.macro

2

使用宝石pry-rails,你将能够访问模式,其专栏和关系。将其包含在您的Gemfile中,然后运行bundle。当您在您的pry控制台中时,您可以使用命令show-models。并且您将获得有关所有模型的信息。

您还可以运行show-model (Model_Name)获得有关具体型号