0

私はレールに慣れていないので、モデルの関連付けについて少し混乱しています。ここでは、何をする必要があるかについて簡単に説明します。、 、 、およびというUserモデルがあります。has_many projectProject has_many uploadUpload belongs_to projectProject belongs_to user

これまでのところ、ユーザーはプロジェクトにアクセスでき、そのプロジェクトからアップロードにアクセスできます。つまり、どのユーザーもすべてのユーザーのプロジェクトとアップロードにアクセスできます。URL 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

ルート.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 に答える