我有用户创建的表单。每个表单只对创建者可见。我想授权其他用户查看特定表单。可以说我想将其他用户列入特定表单的白名单。
这是我尝试创建第三个名为“SharedForm”的模型。
应用/模型/ form.rb
Class Form < ApplicationRecord
belongs_to :user
...
end
应用/模型/ user.rb
Class User < ApplicationRecord
has_many :forms
has_many :forms, through: :sharedforms
...
end
应用/模型/ shared_form.rb
Class SharedForm < ApplicationRecord
belongs_to :user
belongs_to :form
...
end
迁移
class CreateSharedForms < ActiveRecord::Migration[5.0]
def change
create_table :shared_forms do |t|
t.integer :form_id, index: true
t.integer :user_id, index: true
t.timestamps
end
add_foreign_key :shared_forms, :users, column: :user_id
add_foreign_key :shared_forms, :forms, column: :form_id
end
end
为了呈现与用户共享的用户表单和表单,我将索引定义为:
应用/控制器/ forms_controller.rb
Class FormsController < ApplicationController
def index
@forms = Form.where(user_id: current_user.id)
shared = SharedForm.where(user_id: current_user.id)
@sharedforms = Form.where(id: shared)
end
end
这不起作用。
有没有办法分别通过user.forms和user.sharedforms访问我需要的记录?
答案 0 :(得分:0)
您不能对两个关联使用相同的名称,因为后者将覆盖前者:
class User < ApplicationRecord
has_many :forms
# this overwrites the previous line!
has_many :forms, through: :sharedforms
...
end
相反,您需要为每个关联指定一个唯一的名称:
class User < ApplicationRecord
has_many :forms
has_many :shared_forms
has_many :forms_shared_with_me, through: :shared_forms
end
请注意,through
的{{1}}选项应指向模型上的关联!
这可以让你使用:
has_many