我有点像Rails新手,并且不太确定将用户绑定到对象(例如文档)时的约定。 (我现在知道在Rails中使用约定是多么重要)
到目前为止,我已经想出了3个可能的解决方案:
has_many
和belongs_to
user_id
,或类似的东西),将其与用户联系起来。这样,只要用户想要他们的文档索引,我就可以识别所有具有正确ID的索引。此外,我计划使用Devise进行用户身份验证和管理。根据我的理解,这似乎是最受欢迎/广泛使用的认证宝石 - 如果我错了,请纠正我。
答案 0 :(得分:1)
这主要是基于意见的问题,但我倾向于看到大多数项目使用ActiveRecord的关系(例如has_many
,belongs_to
)。
答案 1 :(得分:1)
您可以使用设计进行身份验证(或构建自己的登录系统there is a railscast并使用cancancan进行授权。您可以在documentation找到一些能力定义 仅举例来说
can :update, Article
或者如果用户可以删除自己的东西
can :read, Project, active: true, user_id: user.id
我也会使用与has_many
的ActiveRecord关系,例如和has_many through
答案 2 :(得分:1)
我有点像Rails新手
欢迎来到俱乐部,虽然有些人咬人,但大多数都很酷。
将用户绑定到他们的对象
您已经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
如果用户创建了文档,那么这肯定意味着您必须通过documents
/ users
关系将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
,尽管还有其他身份验证宝石,例如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
:)