首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails 3.2.13 -如何在fields_for中引用字段?

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

Stack Overflow用户
提问于 2013-03-27 00:51:18
回答 1查看 577关注 0票数 1

我有一个模态模型和一个相关的模型ModalityItem。Modality有很多:modality_items,ModalityItem属于:modality。我想要显示的其中一个字段是来自MediaLibrary的name字段,其中id与ModalityItem中的media_library_id匹配。

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

这是我在modalities_controller的编辑方法中的代码,我还可以在其中重命名Modality。我已经创建了数组@items (Array.new(15)),并用ModalityItem或ModalityItem.new中的一行加载每个数组元素。如果所选医疗设备不存在ModalityItem行,则整个数组将具有15个ModalityItem.new元素。如果存在ModalityItem行,我希望将该行连接到相应的MediaLibrary行,并在编辑视图上显示它的名称。

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

以下是我在编辑视图中的代码。

代码语言:javascript
复制
<%= 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号。我使用这些ids创建了另一个与我正在更新的主表相关的表。

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

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

@items将使用表单中的数据进行更新,还是必须保存params:modality_items

我确信这是基本信息,但这是我第一次这样做,几个月来断断续续地在网上搜索了很多关于fields_for的信息后,一直没能找到答案。

注意:我目前没有在视图中引用来自MediaLibrary的名称,因为在继续之前,我需要更多关于如何访问fields_for中的字段的信息。我还有一个问题:name同时存在于Modality和MediaLibrary模型中。模态中的名称是可更新的,但MediaLibrary的名称将仅显示在fields_for语句中。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 01:26:03

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

没什么。你真的应该看看你的日志文件,看看params散列里面有什么。

:modality_items是一个嵌套在params:modality中的数组,因此您可以获得

代码语言:javascript
复制
params[:modality][:modality_items]

因此,form_for(@modality)为您提供了params:modality,然后f.fields_for (注意从form_for传入的f)安排将fields_for参数作为一个数组嵌套在modality散列中

将使用表单中的数据更新@items,还是必须保存params:modality_items?

如果您在modality_items_attributes的医疗模型中使用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的更多详细信息,请阅读此处

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15642831

复制
相关文章

相似问题

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