2010-11-22 13 views
0

こんにちは、表のユーザーに2つの外部キーを持つcategoryという名前のテーブルがあります。構造は以下のとおりです。リレーションを使ってcreated_byとmodified_byに対応するユーザー名を取得するにはどうしたらいいですか? @category = Category.find(params[:id])は、カテゴリテーブルの詳細のみを提供しています。私の現在のモデルクラスは、ユーザモデルにRoR - モデルの関係

CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `title` varchar(255) NOT NULL, 
    `created_by` int(11) unsigned default NULL, 
    `modified_by` int(11) unsigned default NULL, 
    `created` datetime NOT NULL, 
    `modified` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `created_by` (`created_by`), 
    UNIQUE KEY `modified_by` (`modified_by`) 

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `username` varchar(25) NOT NULL, 
    `password` varchar(255) NOT NULL, 
    `usertype_id` int(11) unsigned NOT NULL, 
    `active` tinyint(1) NOT NULL, 
    `created` datetime NOT NULL, 
    `modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `usertype_id` (`usertype_id`) 
) 


-- 
-- Constraints for table `categories` 
-- 
ALTER TABLE `categories` 
    ADD CONSTRAINT `categories_ibfk_1` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE, 
    ADD CONSTRAINT `categories_ibfk_2` FOREIGN KEY (`modified_by`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE CASCADE; 

答えて

1

私はフィールドの両方がCREATED_BY関連付けることができますどのように
class Category < ActiveRecord::Base 
    validates_uniqueness_of :title, :message => "Title already exist" 
    validates_presence_of :title, :message => "Cannot be blank" 
    belongs_to :user 
end 

とMODIFIED_BYですこれはあなたのために働く必要があります。

class Category < ActiveRecord::Base 
    # ... 
    validates_uniqueness_of :title, :message => "Title already exist" 
    validates_presence_of :title, :message => "Cannot be blank" 
    belongs_to :creator, :foreign_key => 'created_by', :class_name => 'User' 
    belongs_to :editor, :foreign_key => 'modified_by', :class_name => 'User' 
    # ... 
end 

class User < ActiveRecord::Base 
    # ... 
    has_many :created_categories, :class_name => 'Category', :foreign_key => 'created_by'                     
    has_many :modified_categories, :class_name => 'Category', :foreign_key => 'modified_by' 
    # ... 
end 
+0

は素晴らしいthatsの! 2番目の部分(コードはユーザモデルに配置する必要がありますか) –

+0

'<%= debug(@ category.creator)%>'はパスワードを含むすべてのフィールドを表示しますが、ユーザー名フィールドのみを取得する方法はありますか? –

+1

2番目の部分は必要ありませんが、*必要があります。両側の関係を定義するのが常にベストです。 – Swanand