簡體   English   中英

導軌中f.select中的多個值

[英]Multiple values from f.select in rails

這不應該是一個問題,但我無法弄清楚。

使用表單幫助器,我可以像這樣填充選擇字段:

...
  <%= f.select(:entity_id, entities.map {|entity| [entity.name, entity.id]}) %>
...

這是為了創建一個User並設置他們的entity_id 提交表單后,我現在有了一個新User ,該Userentity_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 ,因此有一些選擇。

  1. 假設entities是ActiveRecord或某些其他ORM對象的關系,則可以讓該關聯完成工作。 如果用戶has_one :entity然后需要知道其entity_name則在entity_id user設置了正確的entity_id之后,它可能類似於: user.entity.name 這利用了Rails提供的內置關系框架,並避免了重復數據的產生。

  2. 如果entities不是關系或一組持久對象,則用於生成表單的代碼在渲染期間必須了解entities ,因此可以斷定您可以再次訪問它。 在接受此表單的控制器中,以與以前相同的方式獲取entities ,並將具有提交的entity_id名稱的實體鏈接到您要更新的User

  3. 如果這些都不可行或沒有意義,請繼續使用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.

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