2016-03-30 20 views
-1

1つのフォーム選択フィールドでDBに2つの値(ユーザーIDとユーザー名)を保存します。それも可能ですか?これは私がこれまでに得たものである:フォーム - 複数の値を1つ以上保存する選択

のみ(から:ID)USER_IDを保存し

<%= f.collection_select(:user_id, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>

DBに。 user_name(from:name)もDBに保存するには、これをどのように拡張しますか?

<%= f.collection_select(:user_id, :user_name, User.where(brand: current_user.brand), :id, :name, {prompt:true}, {class: 'form-control'}) %>

動作しません。

事前に感謝します。

答えて

1

他のすべての属性を参照するには、本当にuser_idを保存するだけです。

私はoptions_for_selectを使い、IDを保存するときに2次元配列を渡すのが好きです。最初の値はユーザーに表示される値です。 2番目の値は、実際に保存する値になります。この場合、ユーザーにusernameが表示されるようにしたいと思いますが、実際にはuser_idを保存します。

<%= f.select :user_id, options_for_select(User.choices) %> 

、その後user.rbに:あなたは、常にユーザーに保存された任意の属性にアクセスすることができますので、

def self.choices 
    choices = [] 
    User.find_each { |u| choices << [u.username, u.id] } 
    choices 
end 

あなたは両方の値を保存する必要はありませんようになり

idと一緒に。

EDIT:

コメントにつき、あなたは実際には全く選択ボックスを必要としません。ちょうどあなたの注文コントローラcreate actionでそれらを設定します。

@order.username = current_user.username 
@order.user_id = current_user.id 

if @order.save 
    # etc 

は再び、しかし、あなたは本当にあなたが外部キーとしてのuser_idを持っている場合は、ユーザー名を保存する必要はありません。外部キーを使用すると、常に注文のインスタンスを取ってorder.user.usernameと言うことができ、そのuser_idに適切なユーザー名を取得できます。

+0

これは素晴らしいです。私が試したようにしようとしたのは、 '@order.user_id = current_user.id'と' @order.user_name = current_user.name'を作成アクションに保存しているからです。 – CottonEyeJoe

+0

それをしたいのであれば、実際には選択ボックスは全く必要ありません。私は説明を編集します。 – toddmetheny

+1

大変感謝しています!それは動作します – CottonEyeJoe

関連する問題