24

我的 Rails 应用程序中有一个模型 - 用户。我希望在 rails 控制台中列出所有关联,以及关联的类型(1-1、1-many)。

4

5 回答 5

46
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
于 2011-05-04T14:00:57.793 回答
5

使用 gem pry-rails,您将能够访问模型、它的列和关系。将它包含在您的 中Gemfile,然后您运行bundle. show-models当你在你的 pry 控制台中时,你可以使用这个命令。您将获得有关所有模型的信息。

您还可以运行show-model (Model_Name)以获取有关特定模型的信息

于 2016-08-18T21:45:44.700 回答
1

在 /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
于 2013-10-18T14:53:32.673 回答
0

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

于 2012-09-19T22:58:32.617 回答
0

您可以为任何特定的:- user = User.reflect_on_association(:user_profile) 和 user.macro

于 2016-07-13T10:52:40.763 回答