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

我的背包控制器中的属性,所以我可以访问第二个模型/数据库

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 回答