背景
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 %>
保存编辑后,只显示:{} I.e。实际上没有任何东西保存到数据库中。
问题2:如何显示相同的元素列表,选择一个元素,即保存后?
我无法向组织中的供应商添加“selected” = “true”
或同等产品,因为它可能包含多个商品,每个商品可能使用不同的供应商。
我愿意接受有关如何解决这个问题的其他建议。
Rails 5.0.0.1,Ruby 2.3.3
答案 0 :(得分: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)%>
答案 1 :(得分:0)
class Item&lt;的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'] 结束 端