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

メインフォーム:

<% 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したことがないため、実際のインデックスを取得する方法がわかりません。Googleを調べましたが、今のところ解決策が見つかりませんでした。

今は試せません。家に帰ったらやってみます。
インデックスを取得する方法を見つけながら、これを使用することをお勧めします。

幸運を!

于 2012-05-15T11:51:12.123 に答える
1

コメントした人が言ったように、(たとえば)コントローラーの編集メソッドにある<%= @track.name %>場合は、うまくいくと思います。@track = @release.track

于 2012-05-15T11:48:46.460 に答える
0

ビルダーを介して関連オブジェクトにアクセスできるインデックスを追跡する代わりに、実際にはトラックです

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