rails 4模型协会

时间:2013-10-05 12:40:41

标签: ruby-on-rails associations

我是rails的新手,我对模型关联有点困惑。 这里简要介绍了需要做什么。 我有一个User模型,has_many projectProject has_many uploadUpload belongs_to projectProject 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

关系可能吗?你会怎么做?

3 个答案:

答案 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会采用复数形式的目标模型。只是检查你的其他关系是否有复数错误,你应该没问题。