簡體   English   中英

Ruby on Rails 3.2.13-如何引用fields_for中的字段?

[英]Ruby on Rails 3.2.13 - How Do I Reference Fields in fields_for?

我有一個帶有相關模型ModalityItem的Modality模型。 模態有很多:modality_items,而ModalityItem屬於:modality。 我要顯示的字段之一是MediaLibrary中的名稱字段,其中的ID與ModalityItem中的media_library_id匹配。

我計划每個Modality最多允許15行。 當需要添加新記錄時,Rails應用程序將為ModalityItem顯示空白行,或者在存在記錄時顯示ModalityItem行數據。

這是我在modalities_controller的edit方法中擁有的代碼,在這里我也可以重命名Modality。 我創建了數組@items(Array.new(15)),並使用ModalityItem或ModalityItem.new中的一行加載每個數組元素。 如果所選Modality不存在ModalityItem行,則整個數組將具有ModalityItem.new的15個元素。 如果存在ModalityItem行,我想將該行連接到相應的MediaLibrary行,並在編輯視圖上顯示其名稱。

@modality = Modality.find(params[:id])
@modality_items = ModalityItem.joins('JOIN media_libraries ON media_libraries.id = modality_items.media_library_id').where("modality_id = ?", @modality.id).all
@items = Array.new(15)

count = 0
while count < @items.size
  if @modality_items && count < @modality_items.size
    @items[count] = @modality_items[count]
  else
    @items[count] = ModalityItem.new
  end
  count    += 1
end

這是我在編輯視圖中的代碼。

<%= form_for(@modality) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <p style="font-weight: bold; font-size: 114%;"><%= link_to "Return to Manage Modalities", modalities_path %></p><br>
  <%= f.label :name, "Modality Name:" %>&nbsp;<%= f.text_field :name %><br><br>
  <%= f.fields_for :modality_items, @items do |item| %>
    <div class="modality-class">
      <%= item.label :media_library_id, "Media Library" %><%= item.text_field :media_library_id %> 
      <div class="short-label"><%= item.label :rank, "Rank" %></div><%= item.text_field :rank %> 
    </div><br><br>
    <div class="modality-instruct">
      <%= item.label :instructions, "Instructions" %><%= item.text_field :instructions %>
    </div><br><br>
  <% end %>
  <%= f.submit "Save changes to Modality", class: "btn btn-medium btn-custom" %><br><br>
  <p style="font-size: 114%; font-weight: bold;"><%= link_to "Delete this modality?", @modality, method: :delete, data: { confirm: "You sure you want to Delete this modality?" } %></p>
<% end %>

我只將fields_for與collection_select語句一起使用,在該語句中,我在數組的下拉列表中捕獲了多個項目的ID號。 我使用這些ID來創建與要更新的主表相關的另一個表。

在這種情況下,我想收集在屏幕上輸入的信息,循環瀏覽並創建我的記錄。 我計划刪除Modality的所有現有ModalityItem行,並每次都重新創建它們。 當我將fields_for與collection_select一起使用時,我將實例變量@whatevername設置為等於params [:whatevername],然后遍歷id。 使用我包含的代碼,我將設置@modality_items = params [:modality_items],然后使用它進行某些處理。 關於有人輸入數據並單擊按鈕進行更新時會發生以下問題,我有以下問題:

params [:modality_items]包含什么? 它是一個包含視圖中所有文本字段的數組嗎?

會使用表單中的數據更新@items還是我必須保存params [:modality_items]?

我確定這是基本信息,但這是我第一次這樣做,並且在進行了幾個月的有關field_for的反復在線搜索后,一直未能找到答案。

注意:我目前在視圖中未引用MediaLibrary的名稱,因為在繼續之前,我需要有關如何訪問fields_for中字段的更多信息。 我還遇到了:name出現在Modality和MediaLibrary模型中的問題。 Modality中的名稱是可更新的,但MediaLibrary的名稱僅顯示在fields_for語句中。

任何幫助,將不勝感激。

params [:modality_items]包含什么? 它是一個包含視圖中所有文本字段的數組嗎?

沒有。 您真的應該查看您的日志文件,以查看params哈希中的內容。

:modality_items是嵌套在params [:modality]內部的數組,因此您可以

params[:modality][:modality_items]

因此, form_for(@modality)您提供params [:modality],然后f.fields_for(請注意從form_for插入的f)將fields_for參數作為數組嵌套在模態哈希內

會使用表單中的數據更新@items還是我必須保存params [:modality_items]?

如果您在Modality模型中使用mods_items_attributes的Modality模型中的accepts_nested_attributes_for:modality_items並且那些屬性是可訪問的(不受批量分配的保護,那么您的行將自動進行適當的更新或插入。基本上accepts_nested_attributes_for接受嵌套在與參數對應的params哈希中的attriobutes)一樣的名字。

官方文檔中的此鏈接清楚地說明了參數哈希的組織方式http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

並在此處閱讀有關fields_for的更多詳細信息, http: //apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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