【发布时间】:2011-08-18 13:48:47
【问题描述】:
我的 Rails 应用程序中有一个模型 - 用户。我希望在 rails 控制台中列出所有关联以及关联类型(1-1、1-many)。
【问题讨论】:
标签: ruby-on-rails console rails-console
我的 Rails 应用程序中有一个模型 - 用户。我希望在 rails 控制台中列出所有关联以及关联类型(1-1、1-many)。
【问题讨论】:
标签: ruby-on-rails console rails-console
使用 gem pry-rails,您将能够访问模型、它的列和关系。将它包含在您的Gemfile 中,然后运行bundle。当您在您的 pry 控制台中时,您可以使用命令 show-models。您将获得有关所有模型的信息。
您还可以运行show-model (Model_Name) 以获取有关特定型号的信息
【讨论】:
您可以针对任何特定的情况执行此操作:- 用户 = User.reflect_on_association(:user_profile) 和 用户宏
【讨论】:
在 /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
【讨论】:
因为我是新用户,所以我无法澄清/回复其他人的帖子。我会注意到,在检查关联中的任何更改之前,您需要重新加载 rails 控制台。
【讨论】:
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
【讨论】: