[英]Multiple values from f.select in rails
這不應該是一個問題,但我無法弄清楚。
使用表單幫助器,我可以像這樣填充選擇字段:
...
<%= f.select(:entity_id, entities.map {|entity| [entity.name, entity.id]}) %>
...
這是為了創建一個User
並設置他們的entity_id
。 提交表單后,我現在有了一個新User
,該User
的entity_id
現在是select字段中選項的值。
例如,如果我已從select元素中選擇“ Store A”作為我的實體,則在提交表單后,該用戶的entity_id
現在為“ 1”。 很好,但我還需要與用戶關聯的entity_name
“商店A”。
因此,不是我的新用戶返回以下內容:
#<User name: 'John Doe', entity_id: '1', entity_name: 'Store A'>
我正進入(狀態
#<User name: 'John Doe', entity_id: '1', entity_name: nil>
這是有道理的,因為我從未設置entity_name
。
如何根據選擇以這種形式設置entity_name
?
如果我正確理解了您的問題,則似乎您要為一個輸入框同時設置兩個值。 Rails並沒有提供執行此操作的簡單方法,但似乎此答案與您想要的答案相似。
但是,我仍然會問一個問題:為什么要在提交表單時嘗試全部完成?
您已經在User
上設置了entity_id
,因此有一些選擇。
假設entities
是ActiveRecord或某些其他ORM對象的關系,則可以讓該關聯完成工作。 如果用戶has_one :entity
然后需要知道其entity_name
則在entity_id
user
設置了正確的entity_id
之后,它可能類似於: user.entity.name
。 這利用了Rails提供的內置關系框架,並避免了重復數據的產生。
如果entities
不是關系或一組持久對象,則用於生成表單的代碼在渲染期間必須了解entities
,因此可以斷定您可以再次訪問它。 在接受此表單的控制器中,以與以前相同的方式獲取entities
,並將具有提交的entity_id
名稱的實體鏈接到您要更新的User
。
如果這些都不可行或沒有意義,請繼續使用JSON編碼的表單值。
嘗試這個
<%= f.select :entity_id,
options_from_collection_for_select(@entities, :id, :name, entities),
{},
{
data: { placeholder: "Choose entity..." },
multiple: true
} %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.