簡體   English   中英

Rails-從關聯模型的下拉列表中選擇哈希元素,將元素分配給字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM