2017-02-09 5 views
0

会社の従業員ごとに一意のIDを作成したいとします。たとえば、現在私はこのようになっています。Rails5を使用して各社の従業員ごとに一意のIDを生成

当社は、会社だから、

company1= employee1 
company1 = employee2 
company1 = employee3 
company2 = employee4 
company2 = employee5 

belongs_toの多くの従業員と従業員を持っているのcompany_idを変化させながら、ここで従業員IDの変更が取得されていません。 1.

Company1 = employee1 
    company1 = employee2 
    company1 = employee3 
    company2 = employee1 
    company2 = employee2 

のように、誰もがどのようにRails5でそれを行うために私を助けてもらえで始めるべき 各企業のEMPLOYEE_IDの場合:

だから、私はこのような何かをしたいですか?

従業員テーブル

id name  
    1  xxx 
    1  yyy 

はとてもそのが xxxのような保存提示会社テーブル

 id name  position 
    1  aaa  eg_position 
    2  vvv  qqq 

- YYY-2、1 私はこのようにしたいがXXX-1.yyy-1

+0

あなたは気にする必要はありません。 Railsはあなたのためにそれを世話します。モデルIDを自分で操作しようとすると、バグが発生する可能性があります。私はあなたがなぜこれを行う必要があるのか​​全く理解していません –

答えて

0

複合キーのスコープに基づいて一意性検証を使用します。 employee_idcompany_id

validates :employee_id, uniqueness: {scope: [:employee_id, :company_id]}

0

我々は非常に明確でなければなりません。

私はあなたがすべての異なる会社のすべての従業員が格納されている従業員テーブルを持っていると仮定しています。

この場合、同じ2つの主キーを持つことはできません。あなたはこれをすることはできません。

しかし、あなたができることは、異なる会社の異なる従業員で同じである可能性がある別のフィールド、おそらく従業員番号(IDとは異なります)を持つことです。

個人的に私は複合主キーの考え方が嫌いです。

私はテーブル内に従業員番号という別の列を作成します。それを使ってあなたが呼んでいるものを保存してください: "id"

私はこれが役に立ちそうです。

編集:

さらに説明。

テーブル内のすべての行には「id」という列があります。これは特別な名前です。これは「主キー」の名前です。その名前を変更しないでください。同じテーブルの2つの行に同じ「id」または主キーを使用することはできません。あなたはそれをすることはできません。それはデータベースの基本です。同じテーブルの2つの行に同じプライマリキーを持つことはできません - mysql、psql、Accessなど。

同じ「識別番号」を持つ2人の従業員を識別したいとします。それはいいです。あなたはそれを行うことができます。従業員識別番号: "id"と呼ばれてはいけません。これは機能しないからです。あなたはそれを "employee_no"と呼ぶことができ、うまくいくでしょう。

私のデータベーススキーマを示し、さらに明確にすることができます。

これが役に立ちます。

+0

あなたはそれをもっと説明できますか? –

+0

@SonaliShrivastavaが答えを更新しました。 – BKSpurgeon

関連する問題