【问题标题】:Allow only one entry of a model that uses "has_one" in Rails using Mongoid在使用 Mongoid 的 Rails 中只允许一个使用“has_one”的模型条目
【发布时间】:2012-09-17 01:26:49
【问题描述】:
class User
 include Mongoid::Document
 has_one :profile
end

class Profile
  include Mongoid::Document
  belongs_to :user
end

我可以成功创建与用户关联的个人资料。但是,似乎我实际上可以创建许多与用户关联的配置文件。如何只允许为每个用户创建一个配置文件?顺便说一句,我是新手,所以请随时建议可能有帮助的其他阅读材料。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 mongoid


    【解决方案1】:

    这个我没试过,但是你应该可以在 profile 的 user_id 字段上创建一个唯一索引,以防止多个 profile 文档具有相同的 user_id

    index({ user_id: 1 }, { unique: true, name: "user_id_index" })
    

    【讨论】:

    • 我已经这样做了,并且索引已经创建。但是,我仍然可以为同一用户创建第二个配置文件。
    • 看起来在创建第二个配置文件时,它与用户 id 没有关联,而用户 id 正是索引的用途。但是,如果有人尝试创建第二个配置文件,我希望能够引发错误。
    • 尝试在数据库级别创建索引:rake db:mongoid:create_indexes
    • 我这样做了,索引就在那里。此外,当我创建第二个配置文件时,它不会与用户关联。这似乎是索引的工作。我只想在用户尝试创建新配置文件时在客户端抛出一个错误(如果他们已经有一个)。
    • 在您的控制器中,您应该能够检查当前用户是否有个人资料 (if current_user.profile ...),如果有,请使用消息 flash[:error] = "You already have a profile" 设置一个 flash。 flash 应该呈现在应用程序布局中的某个位置,以便在需要时向用户显示消息。如果您需要更具体的信息或代码示例,请将您目前在控制器中的内容发布并查看。
    猜你喜欢
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2017-01-27
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    相关资源
    最近更新 更多