[英]Rails - Select hash element in dropdown from associated model, assign element to field
背景:
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.erb視圖中選擇@organisation.suppliers
,然后將所選的哈希存儲在哈希中的@item.selected_supplier
列中,如上所示?
像這樣將@item.selected_supplier
字段打印到show.html.erb視圖: <%= @item.selected_supplier %>
保存編輯后,僅顯示:{}即實際上沒有任何內容保存到數據庫。
問題2:然后如何顯示相同的元素列表,並選擇所選元素,即后保存?
我無法在組織中為供應商添加“selected” = “true”
或等同名稱,因為它可能有多個項目,並且每個項目可能使用不同的供應商。
我願意就如何解決此問題提出其他建議。
Rails 5.0.0.1,Ruby 2.3.3
我不確定,如果您還沒有嘗試過,請嘗試一下。
答案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)%>
類項目<ActiveRecord :: Base attr_accessor:contact_id def contact_id =(cid)self.selected_supplier = Organization.suppliers.detect {| s | s ['contact_id'] == cid}結束
在控制器中,允許:contact_id代替selected_supplier
在視圖f.select:contact_id,options_for_select(@ item.organization.suppliers.collect {| s | [s ['contact_name],s ['contact_id']]},f.object.contact_id)中,模型類項目def contact_id(selected_supplier || {})['contact_id']結束
def contact_name(selected_supplier || {})['contact_name']結束
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.