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



我有一个带有相关模型ModalityItem的Modality模型。情态有许多:modality_items, ModalityItem属于:Modality。我想要显示的字段之一是来自MediaLibrary的名称字段,其中id与ModalityItem中的media_library_id匹配。

我计划为每个ModalityItem允许多达15行。当需要添加新记录时,Rails应用程序将为ModalityItem显示空白行,或者当存在记录时,显示ModalityItem行数据。

这是我在modalities_controller的编辑方法中的代码,我也可以在其中重命名Modality。我已经创建了数组@items (array .new(15)),并加载每个数组元素从ModalityItem或ModalityItem.new一行。如果所选的模态没有ModalityItem行,那么整个数组将有15个ModalityItem.new元素。如果存在ModalityItem行,我想将该行连接到相应的medilibrary行,并在编辑视图中显示其名称。

@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 %>

我只在collection_select语句中使用了fields_for,我在数组中捕获了下拉列表中多个项目的id号。我使用这些id来创建与我正在更新的主表相关的另一个表。

在这个场景中,我想收集在屏幕上输入的信息,循环它并创建我的记录。我计划删除一个模态的所有现有ModalityItem行,并每次重新创建它们。当我将fields_for与collection_select一起使用时,我设置了一个实例变量@whatevername等于params[:whatevername],然后循环遍历id。用我所包含的代码,我会设置@modality_items = params[:modality_items]然后用它做一些事情我猜。我有以下问题,当有人输入数据并单击按钮更新时会发生什么:

params[:modality_items]包含什么?它是一个包含视图中所有文本字段的数组吗?

@items将从表单的数据更新或我将不得不保存params[:modality_items]?

我确信这是基本信息,但这是我第一次这样做,并且在做了许多关于fields_for off和on的在线搜索几个月后,一直没有找到答案。

注意:我目前没有在我的视图中引用medilibrary的名称,因为在继续之前我需要更多关于如何访问fields_for中的字段的信息。我还有一个问题:名字同时存在于Modality和medilibrary模型中。Modality中的名称是可更新的,但是medilibrary的名称将只在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_items_attributes的modality_models中使用accepts_nested_attributes_for:modality_items,并且这些属性是可访问的(不受大规模分配的保护),那么你的行将自动更新或插入适当的。基本上accepts_nested_attributes_for接受嵌套在params散列中的属性,这些属性对应于相同的名称。

这个来自官方文档的链接清楚地解释了参数哈希是如何组织的http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

阅读这里获取更多关于fields_for http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

的详细信息

相关内容

  • 没有找到相关文章

最新更新