从控制台获取rails关联

时间:2011-05-04 13:53:01

标签: ruby-on-rails console rails-console

我有一个模特用户。现在,我需要从控制台获得相同的所有关联细节。 并且需要知道它是一个还是一个。是否有任何方法可以做到这一点?

5 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分: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

答案 4 :(得分:0)

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