首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从控制台获取rails关联

从控制台获取rails关联
EN

Stack Overflow用户
提问于 2011-05-04 21:53:01
回答 5查看 16K关注 0票数 23

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-05-04 22:00:58

代码语言:javascript
复制
User.reflect_on_all_associations

这将返回一个关联数组,如下所示:

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

示例代码:

代码语言:javascript
复制
reflections = User.reflect_on_all_associations
reflections.each do |reflection|
  puts ":#{reflection.macro} => :#{reflection.name}"
end
票数 45
EN

Stack Overflow用户

发布于 2016-08-19 05:45:45

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

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

票数 5
EN

Stack Overflow用户

发布于 2013-10-18 22:53:33

将这个添加到/lib下的某个位置。例如clone_deep.rb。

代码语言:javascript
复制
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/文件夹下创建新的初始化器。在此文件中粘贴

代码语言:javascript
复制
ActiveRecord::Base.send(:include, CloneDeep)

现在,您可以克隆具有所有has_one和hos_many关联的模型。

代码语言:javascript
复制
cloned_person = person.clone_deep
cloned_person.save
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5884494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档