1

html.erb ページで form_for ヘルパーを使用すると、多くの作業が抽象化されるため、次のようになります。

f.label :book

html ラベルに変換されます。テキスト フィールドに文字列を入力して、複数の記号に関連付けられた値を取得し、それらを文字列に変換して、その文字列を :value キーに挿入できるようにします。

<%= form_for(@backpack) do |f| %>
  <ul>
    <% @backpack.errors.full_messages.each do |error| %>
        <li><%= error %></li>
    <% end %>
  </ul>
  <p>
    <%= f.label :calculator %><br/>
    <%= f.text_field :calculator %>
  </p>
  <p>
    <%= f.label :lunchbox %><br/>
    <%= f.text_field :lunchbox %>
  </p>
    <%= f.label :books %><br/>
  </p>
    <%= f.fields_for :books do |g| %>
      <p>
        <%= g.text_field :book, :value => MY_STRING %>
      </p>
    <% end %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

MY_STRING = :title by :author

したがって、g.text_field を :book だけにしておけば、その記号に関連付けられた文字列が自動的に入力されます。カスタムの方法でそれを実装するにはどうすればよいですか? シンボルは、ネストされたフォーム内の実際のデータをどの程度正確に参照しますか?

私はまた、私が持っていることを言及する必要があります

accepts_nested_attributes_for :books

バックパックコントローラーの属性なので、2番目のモデル/データベースにアクセスできます

4

1 に答える 1

3

記号はあくまでも記号です。オブジェクトへの直接接続はありません。ただし、フォームビルダーに添付された book オブジェクトを使用して、本を説明する文字列を作成できます。

<%= g.text_field :book, :value => "#{g.object.title} by #{g.object.author}" %>

さらに良いことに、これを処理するヘルパーを作成できます。

# in backpacks_helper.rb
def book_title(book)
  "#{book.title} by #{book.author}"
end

そして、次のように使用します。

<%= g.text_field :book, :value => book_title(g.object) %>
于 2012-12-03T22:57:59.573 に答える