从控制台获取 rails 关联

Posted

技术标签:

【中文标题】从控制台获取 rails 关联【英文标题】:Get rails associations from console 【发布时间】:2011-08-18 13:48:47 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

您可以针对任何特定的情况执行此操作:- 用户 = User.reflect_on_association(:user_profile) 和 用户宏

【讨论】:

【参考方案3】:

在 /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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:
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

【讨论】:

澄清一下,它不适用于模型的实例。它适用于模型类。我实际上想要关联记录中的所有详细信息,而不是架构级别。 同意,我们可以使用reflections = User.reflect_on_all_associations reflections.map(&:name)

以上是关于从控制台获取 rails 关联的主要内容,如果未能解决你的问题,请参考以下文章

Rails 中的表关联 - ActiveRecord

Rails 关联不起作用,user_id 未显示在控制台中

了解 Rails 控制器 - 通过关联模型的实例变量查看连接

Rails has_many 控制器中的关联问题

如何使用带有 has_many 的 PaperTrail 版本控制:通过在 Rails 4 中实现关联

Rails 6:通过网络抓取控制器操作创建帖子时如何将用户与创建的帖子相关联