2011-06-28 14 views
1

私はユーザーの製品のhabtmリンクが動作しています。私は(もちろん、常に製品を所有していない)、その製品の作成者を追跡するために、ユーザーモデルと製品モデル間のリンクを追加したい同じモデル間に2つのhas_manyリンク

しかし、ときに私は(多くの)の所有者から製品作成者を区別することはできませんので、私はモデル新しいリンク、アプリケーションのネジアップ私のユーザー製品で書く製品

私を助けることができますか?ここに私のモデルである:

class Product < ActiveRecord::Base 
    belongs_to :group 
    has_and_belongs_to_many :authors 
    has_and_belongs_to_many :users # THIS IS OK (with appart table) 
    has_many :users, :as => creator # THIS LINE DOES NOT WORK AT THE MOMENT 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :products 
    belongs_to :user     # THIS LINE DOES NOT WORK AT THE MOMENT 
    default_scope :order => "username ASC" 
end 

データベースはOKです、と私は私の製品から作成者の列の下のuser_idを保存することができますが、リンクproduct.creator.nameが動作しない(なぜならモデル私は推測する)、私は列内のuser_idを読むことができますが、彼のすべての属性を持つユーザーオブジェクトを取得しません。

REM:完璧に動作しますが、私は創作者のための私の新しいリンクを削除する場合にのみuser.products ...

ありがとう!

答えて

0

:asの構文は、多態性の関連付け用です。これはあなたが望むものではありません。あなたのカラム名についてのご意見は少し曖昧ですので、カラムがproductsテーブルにあると仮定します。これは、その製品の作成者のIDです(関連するアソシエーションのみを含む)。 。

class Product < ActiveRecord::Base 
    has_and_belongs_to_many :users 
    belongs_to :creator, :foreign_key => :user_id, :class_name => "User" 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :products 
    has_many :owned_products, :class_name => "Product" 
end 
+0

私はすぐに答えは、まだ動作していないので、チェックしました。私はキークリエーターにアクセスすることができず、Product.creatorは常に021を返します(たとえSQliteビューアでテーブルの列にuser_idが表示されても) –

+0

とuser.owned_productsはそのような列を返しません:products.user_id –

+0

私が言ったように、私は製品の作成者を指し示す 'products'の列が' user_id'と呼ばれていると仮定しました。 'user_id'をその列が呼び出されたものに変更します。 – smathy

0

そのための素晴らしい宝石があります:https://github.com/spovich/userstamp

私は私のプロジェクトでそれを使用し、それが良い作品 - あなたは自分のモデルに「スタンパブル」追加し、creator_id(およびupdater_id)はauthomaticlyを埋めています。

関連する問題