首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails -从关联模型的下拉列表中选择散列元素,将元素赋值到字段

Rails -从关联模型的下拉列表中选择散列元素,将元素赋值到字段
EN

Stack Overflow用户
提问于 2017-03-16 08:04:24
回答 2查看 642关注 0票数 0

背景:

代码语言:javascript
复制
Organisation has_many :items

Item belongs_to :organisation

组织表:

代码语言:javascript
复制
t.hstore  "suppliers",  array: true

这是一个散列数组,可以在这样的组织页面上访问:

代码语言:javascript
复制
@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"}]

项目表

代码语言:javascript
复制
t.hstore “selected_supplier”

这应该是表格中的散列:

代码语言:javascript
复制
@item.selected_supplier = {"contact_id" => "4ab343ad-1ebb-4afe-9d48-1814a93c2081", "contact_name"=>"Small Business Pty Ltd"}

注意:只有一个散列,而不是散列数组。

我能够在项目编辑页面的下拉列表中显示散列的@organisation.suppliers数组,如下所示:

代码语言:javascript
复制
<%= 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 %> post保存编辑,只是显示:{},实际上没有任何内容保存到数据库中。

问题2:如何才能显示相同的元素列表,并选择所选的元素,即节省员额?

我不能添加一个“selected” = “true”或相当于一个供应商在组织中,因为它可能有多个项目,每个项目可能使用不同的供应商。

关于如何解决这个问题,我愿意听取其他建议。

Rails 5.0.0.1,Ruby 2.3.3

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-17 05:07:13

类项< ActiveRecord::Base attr_accessor :contact_id def contact_id=( cid ) self.selected_supplier = organization.suppliers.detect {contact_id=‘’contact_id‘== ==} end

在控制器中,允许:contact_id而不是selected_supplier

在视图options_for_select(@item.organization.suppliers.collect f.select _s :contact_id [s‘’contact_name,s‘’contact_id‘]},f.object.contact_id)模型类项目def contact_id中的另一件事是’contact_id‘端

def contact_name (selected_supplier连成{})'contact_name‘端

票数 0
EN

Stack Overflow用户

发布于 2017-03-16 08:35:05

我不确定,但如果你还没试过,那就试试吧。

答案1

代码语言:javascript
复制
@item.selected_supplier = @item.organisation.suppliers.first

或者更有条件的选择

代码语言:javascript
复制
@item.selected_supplier = @item.organisation.suppliers.detect {|s| s["contact_id"] = "4ab343ad-1ebb-4afe-9d48-1814a93c2081" }

代码语言:javascript
复制
@item.selected_supplier = @item.organisation.suppliers.select {|s| s["contact_id"] = "4ab343ad-1ebb-4afe-9d48-1814a93c2081" }.first

答案2

代码语言:javascript
复制
<%= f.select :selected_supplier, options_for_select(@item.organisation.suppliers.collect {|x| [x['contact_name'], x['contact_id']] },@item.selected_supplier)%>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42828371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档