2

我觉得这应该真的很简单,但我完全卡住了!

在一个表单中,我可能有一个如下字段:

<%= f.text_field :name, :class => "text" %>

在编辑时,这会撤回在创建时提交的值,这很好。但我想防止某些字段被编辑。我知道我可以禁用或隐藏该字段,但我希望能够提取值以以其他方式显示和使用。我如何访问它们?

在这种情况下,我尝试了以下方法:

<%= f.track.name %>

<%= track.name %>

<%= @track.name %>

但以上都不起作用!

有什么想法吗?

编辑:(我为此使用嵌套表单)

<%= form_for(@release, :html => { :multipart => true }) do |f| %>
    <h3>Upload Tracks for <%= @release.title %></h3>

    <%= f.fields_for :tracks do |builder| %>
    <%= render 'upload_track_fields', :f => builder %>
    <% end %>

<%= f.submit "Upload Tracks", :class => "submit" %>    
<% end %>

以及渲染的upload_track_fields:

<%= f.text_field :position, :class => "text" %>
<%= f.text_field :name, :class => "text" %>
<%= f.text_field :isrc, :class => "text" %>
<%= f.text_field :version, :class => "text" %>
<%= f.file_field :track, :class => "text" %>
<%= f.hidden_field :primary_genre_id %>
<%= f.hidden_field :secondary_genre_id %>
<%= f.hidden_field :alt_primary_genre %>
<%= f.hidden_field :alt_secondary_genre %>
<%= f.hidden_field :asset_tier %>
<%= f.hidden_field :preview_start %>
<%= f.hidden_field :parental_advisory %>
<%= f.hidden_field :available_separately %>
<%= f.hidden_field :_destroy %>

我隐藏了大部分字段以防止编辑,但仍需要查看一些字段,以便将它们保留为文本字段。我试图禁用它们,但这会停止任何更改(特别是文件上传)的工作。

简而言之,我更愿意将以上大部分内容显示为文本而不是表单字段。

4

3 回答 3

1

正如那些评论过的人所说,<%= @track.name %>如果您@track = @release.track在控制器的编辑方法中有(例如),我认为应该可以工作。

于 2012-05-15T11:48:46.460 回答
1

在主窗体中:

<% index = 0 %>
<% f.fields_for :tracks do |builder| %>
  <%= @release.tracks[index].name %>
  <%= render 'upload_track_fields', :f => builder %>
  <% index += 1 %>
<% end %>

在嵌套形式中:

<%= f.text_field :position, :class => "text" %>
# Notice that there's no "name" attribute
<%= f.text_field :isrc,     :class => "text" %>
<%= f.text_field :version,  :class => "text" %>
<%= f.file_field :track,    :class => "text" %>

我在第一个片段中所做的很脏,但我从未使用过fields_for,所以我不知道如何获取实际索引。我查了谷歌,但到目前为止我还没有找到解决方案。

我现在不能试试,等我回家再试试。
我建议在找到获取索引的方法时使用它。

祝你好运!

于 2012-05-15T11:51:12.123 回答
0

您可以通过构建器访问关联的对象,而不是跟踪索引,它实际上是一个跟踪

<% f.fields_for :tracks do |builder| %>
  <%= builder.object.name %>
  <%= render 'upload_track_fields', :f => builder %>
<% end %>
于 2015-01-22T21:04:47.810 回答