【问题标题】:Rails associations for a model 'owned' by many Users许多用户“拥有”的模型的 Rails 关联
【发布时间】:2013-03-03 15:20:20
【问题描述】:

我有一个简单的 Rails 应用程序,可用作数字标牌应用程序的 cms。
在这个应用程序中,将有一个预定义样式池,我想向所有用户提供这些样式。
每种样式都包含背景图片、一些 CSS 和视频。

我的目标是进行设置,我可以准备不同的样式,使用 rails admin 添加它们,并且每个用户都应该有一个菜单,他可以在其中为他的帐户选择一种样式作为 active_style

听起来很简单,但我卡住的地方是 UserStyle 模型之间的关联。
我尝试了几个小时不同的东西(has_many: / has_many_though / has_and_belongs_to_many),但我无法达到每个用户都可以选择其中一个样式对象并将其设为 active_style 并且只允许 一个 active_style 一次。

我只是想知道最好的方法是什么,如果有人可以提供帮助,我会非常高兴。
我对 Rails 编程比较陌生,如果这看起来很愚蠢,请原谅。

【问题讨论】:

    标签: ruby-on-rails associations has-many-through has-many model-associations


    【解决方案1】:

    我知道这听起来不直观,但我认为在这种情况下您想要的关联是“belongs_to”。我说这很不直观,因为说“一个用户属于一个活跃的样式”听起来很奇怪,但是“has_one”不允许一个样式成为多个用户的活跃样式。

    以下代码假设您的用户表上有一个“active_style_id”整数列,用于存储外键:

    User < ActiveRecord::Base
      belongs_to :active_style, class_name: 'Style'
    end
    

    这将使您可以执行以下操作:

    style = Style.find(...)
    user = User.create(active_style: style)
    user.active_style # => style
    

    【讨论】:

    • 谢谢比灵顿!很好的答案,这正是我想要的。你对这个“不直观”的性质也是正确的:)这正是让我无法使用belongs_to的原因。我想当我使用它时,我不能让一个样式为多个用户激活,但显然它恰恰相反。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多