我是rails的新手,我对模型关联有点困惑。
这里简要介绍了需要做什么。
我有一个User
模型,has_many project
,Project
has_many upload
,Upload
belongs_to project
和Project
belongs_to user
。
到目前为止,它正在运行,用户可以访问那些项目,并从该项目访问上传。 问题是,任何用户都可以访问每个用户项目和上传。通过更改网址localhost:3000 / projects / 9 / uploads / 57 我需要让项目和上传只能由正确的用户访问(用户如何创建项目和上传)
schema.rb
create_table "projects", force: true do |t|
t.string "name"
t.string "comment"
t.integer "user_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "uploads", force: true do |t|
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
t.string "edl_file_name"
t.string "edl_content_type"
t.integer "edl_file_size"
t.datetime "edl_updated_at"
end
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.datetime "created_at"
t.datetime "updated_at"
t.string "password_digest"
t.string "remember_token"
end
用户模型
has_many :project
has_many :upload, :through => project
项目模型
belongs_to :user
has_many :upload, :dependent => :destroy
上传模型
belongs_to :project
has_one :user, :through => :project
的routes.rb
resources :users
resources :projects do
resources :uploads do
end
end
关系可能吗?你会怎么做?
答案 0 :(得分:1)
我会尝试以下方法:
User Model
has_many :uploads
has_many :projects, :through => uploads
Project Model
has_many :uploads
has_many :users, :through => uploads # Maybe :dependent => :destroy
Upload Model # Just 2 foreign keys here
belongs_to :project
belongs_to :user
基本上,Project和User都使用连接表'uploads'来访问有关另一个实体的信息。以这种方式使用的连接表有2 belongs_to
个,然后引用表有has_many
:through ->
个。
更多http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association
答案 1 :(得分:0)
当您引用has_many
的模型时,引用的对象变为复数。所以它应该是has_many :projects
。与上传相同;它应该是has_many :uploads
。当你关联关系的另一面(belongs_to
)时,你是正确的。
答案 2 :(得分:0)
我注意到在你的has_many关系中,你对目标模型的声明只是单数形式。
对于您的用户模型,您应该执行以下操作:
has_many :projects
has_many :uploads, :through => project
当使用has_many关系时,Rails会采用复数形式的目标模型。只是检查你的其他关系是否有复数错误,你应该没问题。