2017-05-16 1 views
0

sales_codesales_codeable_idsales_codeable_typeが多型属性である多型モデルが呼び出されました。関連するモデルはprocessorsplatformsです。Rails多型シンプルフォームコレクション選択 - 第2の属性値の受け渡し

私はそうのような私sales_code_controllerのプロセッサ/ paltformsの配列を生成しています:

= f.input :sales_codeable_id, collection: @processorsPlatformsArray, label: "Processor/Platform:", required: :true:新たな販売コードを作成するための私の形(単純な形式)で

@processorsPlatformsArray = Processor.order(:name, 'id asc').map{|p| [p.name, p.id, p.class.name]} 
@processorsPlatformsArray += Platform.order(:name, 'id asc').map{|p| [p.name, p.id, p.class.name]} 

を、私は以下の入力を持っています

ドロップダウンリストからプロセッサ/プラットフォームを選択すると、適切なsales_codeable_idがフォームのパラメータに正しく渡されます。しかし、sales_codeable_typeの値が渡されていないため、フォームを送信するとエラーがスローされます(明らかに必須です)。選択したプロセッサ/プラットフォームのクラス名をsales_codeable_typeパラメータとして渡す最も効率的な方法は何ですか? JavaScriptをなし

答えて

1

:あなたはobject_type|idようになります値を構築し、その後はJavaScriptを使用して、コントローラに手動で

をそのパラメータを解析するために、入力にvalue_methodオプションを使用することができます。フォームにsales_codeable_typeための隠し入力を追加します。 。コレクションを取り消すときは、HTMLデータ属性を、各オプションに、そのオプションの売上コード化可能タイプを追加します。選択されたオプションのdata-type属性と隠しフィールドを移入することを選択に変更ハンドラを追加

<option value="1" data-type="Processor">Processor 1</option> 

:だから、のように見える終わります。

どちらの場合でも、コントローラーはタイプ値をホワイトリストに登録し、2つの承認された値の1つであることを検証する必要があります。

私はまだ試していない第三のアプローチはこれと同様に、関連するオブジェクトを見つけるために、GlobalIdを使用することであろう。私はグローバルIDのコンボを使用してコントローラに解析を介してのparamsを割り当てる終わっhttp://stefan.haflidason.com/simpler-polymorphic-selects-in-rails-4-with-global-id/

+0

。正しい方向に私を指してくれてありがとう! –

関連する問題