私は本当にこの問題に行き詰まっており、そこから抜け出す方法を見つけることができません:
ユーザーモデルがあります(デバイスで構築されています)。
ユーザーのネストされたリソースであるアイテム モデルがあります。
ユーザー モデル (user.rb) では:
# Setup the relations model
has_many :items, :dependent => :destroy
アイテム モデル (item.rb) では:
# Setup the relations model
belong_to :user
routes.rb で:
resources :users do
resources :items
end
このようにして、ユーザーはアイテムを作成して所有できます。
パスの例: user/1/items/1
今、私は、ユーザーがアイテム (彼によって作成された) を別のユーザーと共有できるようにしたいと考えていますが、アイテムの所有権を保持しています (アイテムを作成したユーザーだけがアイテムを破棄でき、アイテムを作成したユーザーだけです)アイテムの一部のフィールドを更新できますが、他のフィールドは、アイテムを受け取ったユーザーによっても更新可能 (編集可能) である必要があります)。つまり、アイテムを作成したユーザーとアイテムを受け取ったばかりのユーザーで、アイテムに対するアクセス許可が異なるようにしたいと考えています。
ユーザー間でアイテムを共有できるようにするために、次の as_many :through 関係を構築します。
共有と呼ばれる別のモデルを作成しました (アイテム モデルとユーザー モデルの間の結合テーブルを表します)。
次に、user.rb (ユーザー モデル) を次のように変更しました。
# Setup the Item relations model
has_many :items, :dependent => :destroy # this to set up the item ownership
#This to set up the has_many :through realtionship
#(note I am calling a new model shared_items - that really doesn't exist - is an item model)
has_many :sharings
has_many :shared_items, :foreign_key => "shared_user_id", :through => :sharings
accepts_nested_attributes_for :items #This will work for the nested items resource
accepts_nested_attributes_for :sharings #Do I really need this line??
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation,
:items_attributes, #This will work for the nested items resource
:sharings_attributes #Do I really need this line??
次に、item.rb (アイテム モデル) を次のように変更しました。
# Setup the relations model
belong_to :user
#this two lines are suppose to connect the two models (item and receiver) using a joint table
has_many :sharings
has_many :shared_users, :foreign_key => "shared_item_id", :through => :sharings
accepts_nested_attributes_for :sharings #Do I really need this line??
attr_accessible :user_id, :item_type, :reference_date, :title,
:sharings_attributes #Do I really need this line??
私は次のようにsharing.rb(共有モデル - ジョイントテーブル)を書きました:
belongs_to :shared_user, :class_name => "User"
belongs_to :shared_item, :class_name => "Item"
attr_accessible :shared_moment_id, :shared_user_id
その後、受信者もユーザー (自己参照関係) であり、私のアプリにはまだ友情モデル (ユーザーが他のユーザーと友達になることを可能にする) が存在するという事実を考慮する必要がありました。魅力のように動作します)-しかし、Joelの提案が役立つと思います(または、友人テーブルへの参照を変更するだけです)。
これで、アイテム (ItemsController) の安らかなコントローラーを作成し、ユーザー (実際には current_user) が問題なくアイテムを作成、破棄、または更新できるようにする、新しい、作成、表示、破棄などのアクションを追加できます。 . (項目モデルでわかるように、外部キー user_id があります)。
代わりに、共有モデルを管理するための安らかなコントローラーを作成する (新しい共有アイテムを作成し、それらを他のユーザーと割り当てる (共有する) ため) には、何をする必要がありますか?
データベースの値を思い出すにはどうすればよいですか? たとえば、次のようになります。
ID 3 のユーザーが 5 つの新しいアイテム (アイテム ID 1、2、3、4、5) を作成し、このアイテムの一部を他のユーザーと共有することにしました (アイテム 2 はユーザー 6 と、アイテム 4,5 はユーザー 7 と) ,8,9)???
ネストされたリソースを共有のために引き出したところ、次のようになりました。
item は、ユーザー (user/2/item/5) 共有のネストされたリソースです。
誰か助けてください……。
どうもありがとうディヌズ
更新 私はアプリを適切に動作させることができましたが、単体としてのみ:
ユーザーがアイテムを作成します。彼がアイテムを別のユーザーと共有することを決定した後 (そして、共有コントローラー (ジョイント テーブル コントローラー) を使用して)、ジョイント テーブル内にレコードを作成することができました (ユーザー ID とアイテム ID 固有のものを渡します)。
代わりに、すべての操作を 1 回のショットで実行したいと思います。
current_user (ログインしているユーザー) がアイテムを作成し、同じ形式でそれを他のユーザー (配列) と共有するか、自分用に保持する機会が必要です。
このさらなるステップでは、アイテム コントローラーと共有コントローラーを融合し、新しいアイテム ビューで同じことを行う必要があると思います。
さて、どのように進める必要がありますか?私のケースをカバーできる has_many :through の良いチュートリアルを誰かが提案できれば (この状況でコントローラーとビューがどのように見えるかを本当に理解する必要があります)、モデルの関連付けはうまく設定されていると思いますが、私はコントローラーとビューをどのように処理するかを実際に理解することはできません。