2011-08-10 11 views
0

私は6ヶ月以来3 &のレールで作業していましたが、 "文字列"列を主キーとしてどのように実装できるかについてはまだ分かりません。私はそれが非整数フィールドがMySQLのテーブルのプライマリキーになることを許可していないと思います。 たとえば、 customer_code:stringをプライマリキーとして持つ顧客テーブルがある場合& customer_codeフィールドを使用してcustomerテーブルを参照するproductsテーブル、つまりproductsテーブルのcustomer_codeは外部キーです。レール3にこの関係を実装するにはどうすればよいですか? 誰も私にこの関係を実装するための適切な方法を提案できますか?rails 3 mysql relationships

答えて

0

私は物事をシンプルにし、標準的なレールの規則に従います - あなたのキーの自動IDフィールドを使用してください。

コードを取得するためにユーザーオブジェクトをルックアップする必要がないように、製品テーブルにcustomer_codeを設定する場合は、製品を保存するときにこれも保存します。

0

CostumerProductsの2つのモデルがあります。だからこのソリューションはどうですか?落とし穴に

class Costumer < AR::Base 
    set_primary_key 'code' 

    has_many :products, :foreign_key => :costumer_code 

    validates :code, :presence => true 
end 

class Product < AR::Base 
    belongs_to :costumer, :foreign_key => :costumer_code 
end 

は、それがidキーデフォルトのプライマリのような自動インクリメントではありませんので、あなたは、コードが正しく作成時に設定されているのcostumersを確保しなければならないということです。 before_createコールバックが役に立ちます。

+0

「before_filter」ではなく「before_create」または「before_save」です。フィルタはコントローラ内にあります。 – RocketR

+0

うん、そう。もちろんbefore_createコールバックです。 –

0
class Product < ActiveRecord::Base 
    belongs_to :customer, :foreign_key => :customer_code, :primary_key => :customer_code 
end