0

我是 Rails 新手,对模型关联有点困惑。这里是需要做什么的简要说明。我有一个User模型,那个has_many project,和Project has_many uploadUpload belongs_to projectProject belongs_to user

到目前为止它正在工作,用户可以访问那里的项目,并从该项目访问那里上传。问题是,任何用户都可以访问每个用户的项目和上传。通过更改 url localhost:3000/projects/9/uploads/57 我需要使项目和上传只能由正确的用户访问(用户如何创建项目和上传)

架构.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

路线.rb

resources :users  

resources :projects do
 resources :uploads do 
 end
end

也许是关系?你会怎么做?

4

3 回答 3

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

基本上,项目和用户都使用连接表“上传”来访问有关其他实体的信息。以这种方式使用的连接表有 2 belongs_to,然后引用表有has_many :through ->'。

更多信息请访问http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

于 2013-10-05T12:47:20.537 回答
0

当你引用一个模型时has_many,被引用的对象变成复数形式。所以应该是has_many :projects。与上传相同;它应该是has_many :uploads。当您关联关系的另一方时(belongs_to),您在单数的地方是正确的。

于 2013-10-05T12:44:09.373 回答
0

我注意到在你的 has_many 关系中,你对目标模型的声明只是单数形式。

对于您的用户模型,您应该执行以下操作:

    has_many :projects
    has_many :uploads, :through => project

Rails 在使用 has_many 关系时采用目标模型的复数形式。只需检查你的其他关系是否有复数错误,你应该没问题。

于 2014-06-02T08:52:31.137 回答