gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 中管理用户(和所有权)

转载 作者:太空宇宙 更新时间:2023-11-03 18:10:50 25 4
gpt4 key购买 nike

我有点像 Rails 新手,不太确定将用户绑定(bind)到他们的对象(例如文档)时的约定是什么。 (我现在知道在 Rails 中遵循约定是多么重要)

到目前为止,我已经想到了 3 个可能的解决方案:

  1. 使用 has_manybelongs_to 使每个文档本质上成为每个用户的子文档>
  2. 为每个文档提供一个整数(user_id,或类似的东西),将其与用户联系起来。这样,无论何时用户需要他们文档的索引,我都可以识别所有具有正确 ID 的文档。
  3. 似乎有一些插件完全以自己的方式进行用户管理,不符合上述任何一种。

此外,我计划使用 Devise用于用户认证和管理。根据我的理解,这似乎是最流行/使用最广泛的身份验证 gem——如果我错了请纠正我。

最佳答案

I'm somewhat of a Rails newbie

欢迎来到俱乐部,虽然有些人咬人,但大多数人都很酷。


tying users to their objects

您已经answered your own question ...

#app/models/user.rb
class User < ActiveRecord::Base
has_many :documents
end

#app/models/document.rb
class Document < ActiveRecord::Base
belongs_to :user
end

如果用户创建了一个文档,那肯定意味着您必须通过 has_many/belongs_to 关系...

--

为了给您一些上下文,您必须添加 user_id foreign_key到您的 documents 表:

$ rails g migration AddUserForeignKeyToDocuments

#db/migrate/add_user_foreign_key_to_documents______.rb
class AddUserForeignKeyToDocuments < ActiveRecord::Migration
def change
change_table :documents do |t|
t.references :user, index: true
end
end
end

$ rake db:migrate

这将允许类似以下内容(使用 current_user helper from Devise ):

#config/routes.rb
resources :documents

#app/controllers/documents_controller
class DocumentsController < ApplicationController
def create
@document = current_user.documents.new document_params
@document.save
end

private

def document_params
params.require(:document).permit(.....)
end
end

如果您不确定用户身份验证,您应该使用 Devise , 尽管还有其他身份验证 gem,例如 sorcery

设置 Devise 很简单:

#Gemfile
gem 'devise', '~> 3.5', '>= 3.5.3'

$ rails generate devise:install
$ rails generate devise User
$ rake db:migrate

#config/routes
devise_for :users

#app/controllers/documents_controller.rb
class DocumentsController < ApplicationController
before_action :authenticate_user!
end

这将使它只有登录用户才能访问 /documents :)

关于ruby-on-rails - 在 Ruby on Rails 中管理用户(和所有权),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34562994/

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