2017-03-16 9 views
0

背景:レール - 関連モデルからプルダウンで選択ハッシュ要素は、フィールドに要素を割り当てる

Organisation has_many :items 

Item belongs_to :organisation 

機関表:これは、ハッシュの配列、缶は

t.hstore "suppliers", array: true 

ありますそのような組織のページにアクセスする:

@organisation.suppliers = 
[{"contact_id"=>"4ab343ad-1ebb-4afe-9d48-1814a93c2081", "contact_name"=>"Small Business Pty Ltd"}, 
{"contact_id"=>"42771b60-19a7-4692-af81-dd9f9b9362d4", "contact_name"=>"ABC Furniture"}, 
{"contact_id"=>"3e776c4b-ea9e-4bb1-96be-6b0c7a71a37f", "contact_name"=>"Bayside Club"}] 

アイテムこれはちょうど形でハッシュであるべきである

t.hstore “selected_supplier” 

表:

@item.selected_supplier = {"contact_id" => "4ab343ad-1ebb-4afe-9d48-1814a93c2081", "contact_name"=>"Small Business Pty Ltd"} 

注:唯一のハッシュ、ハッシュのない配列。

私はそうのように、アイテムの編集ページで、ドロップダウンにハッシュの@organisation.suppliers配列を表示することができるよ:

<%= f.select :selected_supplier, options_for_select(@item.organisation.suppliers.collect {|x| [x['contact_name'], x['contact_id']] })%> 

質問1:どのように私はedit.htmlに選択することができます。上記のように、のうちの1つであるerb viewを選択し、選択したハッシュをハッシュで@item.selected_supplier列に保存しますか?

@item.selected_supplierフィールドを次のようにshow.html.erbビューに表示します。<%= @item.selected_supplier %>編集を保存して保存すると、{} Ie。何も実際にデータベースに保存されていません。

質問2:どのようにして、選択した要素、つまり保存後の要素のリストを表示できますか?

それは複数の項目を有することができ、各項目が異なるサプライヤーを使用することができるように私は、組織内“selected” = “true”サプライヤーに相当する追加することはできません。

私はこの問題に取り組む方法についての代替提案を開いています。

Railsの5.0.0.1、Rubyの2.3.3

答えて

0

クラスアイテム<のActiveRecord ::ベース attr_accessor:contact_id DEF contact_id =(CID) self.selected_supplier = organization.suppliers.detect {|です| S [ 'contact_id'] == CID} 端端コントローラ、許可に

:contact_id、options_for_select(@ item.organization.suppliers:ビュー f.selectに代わりselected_supplier

のcontact_id .collect f.object.contact_id) DEF} {|| (selected_supplierをcontact_idモデル クラスアイテム もう一つ)[{| | S [S [contact_id '] 'CONTACT_NAME]は、[S']} 'contact_id'] end

def contact name (selected_supplier || {})['contact_name'] end end

0

私はよく分からないが、あなたはこれを試していない場合はそれを試してみます。

回答1

@item.selected_supplier = @item.organisation.suppliers.first 

以上の条件を選択

@item.selected_supplier = @item.organisation.suppliers.detect {|s| s["contact_id"] = "4ab343ad-1ebb-4afe-9d48-1814a93c2081" } 

又は

@item.selected_supplier = @item.organisation.suppliers.select {|s| s["contact_id"] = "4ab343ad-1ebb-4afe-9d48-1814a93c2081" }.first 

回答2

<%= f.select :selected_supplier, options_for_select(@item.organisation.suppliers.collect {|x| [x['contact_name'], x['contact_id']] },@item.selected_supplier)%> 
関連する問題