gpt4 book ai didi

ruby-on-rails - Ruby on Rails 协会

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:08 26 4
gpt4 key购买 nike

最近我开始使用 Ruby on Rails 而不是 PHP 创建我的网站。

我已经很容易地掌握了这门语言,但仍然对联想没有 100% 的信心:)

我有这种情况:

用户模型

has_and_belongs_to_many :roles

榜样

has_and_belongs_to_many :users

期刊模型

has_and_belongs_to_many :roles

所以我有一个roles_users 表和一个journals_roles

我可以像这样访问用户角色:

user = User.find(1)
User.roles

这给了我分配给用户的角色,然后我可以像这样访问期刊模型:

journals = user.roles.first.journals

这让我根据角色获取与用户关联的日志。我希望能够像这样访问期刊 user.journals

在我的用户模型中我试过这个:

def journals
self.roles.collect { |role| role.journals }.flatten
end

这让我得到了扁平化数组中的期刊,但不幸的是,在这种情况下我无法访问与期刊相关的任何内容,例如在它具有的期刊模型中:

has_many :items

当我尝试访问 user.journals.items 时,它不起作用,因为它是一个展平数组,我正在尝试访问 has_many 关联。

除了我在上面展示的 collect 方法之外,是否可以通过其他方式获取 user.journals

希望你们明白我的意思,如果不明白请告诉我,我会尽力解释得更好。

干杯

头皮

最佳答案

如果您想要user.journals,您应该手动编写查询。据我所知,Rails 确实有一层深度的 has_many :through 关联(habtm 是一种 has_many :through)。您可以将 has_manyfinder_sql 一起使用。

user.journals.items 在你的例子中不起作用,因为 journals 是一个数组,它没有 items 方法联系。因此,您需要选择一个期刊,然后调用 items:

user.journals.first.items

我还会修改您的journals 方法:

def journals
self.roles(:include => :journals).collect { |role| role.journals }.flatten.uniq
end

uniq 删除重复项,:inlcude => :journals 应该改进 sql 查询。

关于ruby-on-rails - Ruby on Rails 协会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com