【发布时间】:2017-12-21 16:49:22
【问题描述】:
我有这样的架构:
userhas_many post_valuesbelongs_to authorhas_many addresses
class User < ActiveRecord::Base
has_many :post_values
end
class PostValue < ActiveRecord::Base
belongs_to :user
belongs_to :author
end
class Author < ActiveRecord::Base
has_many :post_values
has_many :addresses
end
class Address < ActiveRecord::Base
belongs_to :author
end
此架构只是一个示例,并不反映真实案例。
现在我有一个这样的字符串:post_values_author_addresses。
Rails 库中存在一个库或一个 gem 或一个方法,给定该字符串返回关联哈希:{post_values: {author: :addresses}}?
我知道 Ransack 的作用域类似......
我需要这样的方法:
User.get_associations(:post_values_author_addresses) => {post_values: {author: :addresses}}
我希望我是清楚的......
【问题讨论】:
-
这对我来说没有意义不应该是
{user: [:post_values,:author, :addresses]}因为现在看起来你想要的哈希意味着Userhas_many :post_values 和PostValuebelongs_to :author 和Authorhas_many :addresses。是您的架构吗?这个问题非常不清楚。当我读到它时,它读作Userhas_many :post_values 和Userbelongs_to :author 和Userhas_many :addresses。您还可以解释为什么这在功能上是必要的,它可能会帮助我们为您解决它 -
@engineersmnky 编辑了问题...
-
这需要一些解析逻辑。你能控制你得到的字符串(比如
post_values_author_addresses)吗?你能把它改成post_values__author__addresses吗?这样每个双下划线都被认为是关系名称的分隔符。此外,正如@engineersmnky 的评论所暗示的那样,如果您想要“同一级别”的多个关联,例如post_values: {:user, author: :addresses},这种解析将很困难。您将如何编写匹配这些关联哈希的字符串? -
字符串应该只有一个下划线。
-
@Pioz 链接名称重叠时会发生什么?比如说
Userhas_one :plan 和Userhas_many :plan_fields 和Planhas_many :fields 那么像:plan_fields这样的东西会发生什么,应该是:plan_fields或{plan: :fields}这种用法看起来很脆弱,我们仍然没有可行的用例示例
标签: ruby-on-rails ruby activerecord