0

我在 Rails 中有一个简单的视图,我正在从 ERB 迁移到 HAML。此视图呈现嵌套表单,但包含一个空的子对象,它没有任何现有的子对象。

使用 ERB,我是通过这样做来实现的:

<%= form_for @question do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name %>

  <%= f.object.answers.build if f.object.answers.empty? %>

  <%= f.fields_for :answers do |builder| %>
    <%= render 'answer_fields', f: builder %>
  <% end %>

  <%= f.submit %>
<% end %>

有用!但是当我使用 HAML 做同样的事情时,它也“有效”,但会在表单之间打印出令人讨厌的文本,看起来像这样:#<Answer:0xb159004>.

这就是我的 HAML 的样子:

= form_for @question do |f|
  = f.label :name
  = f.text_field :name

  = f.object.answers.build if f.object.answers.empty?

  = f.fields_for :answers do |builder|
    = render 'answer_fields', f: builder

  = f.submit

它实际上是一回事,但是 ERB 和 HAML 有效,虽然它有效,但它也在#<Answer:0xb159004>表格附近打印,我不知道如何摆脱。

我做错了什么还是这是一个 HAML 限制/错误?有什么解决方法吗?

4

2 回答 2

0

这并不能直接解决您的问题,但我总是使用http://html2haml.heroku.com/将现有的 erb 模板切换到 HAML。只需将现有的 erb 代码复制并粘贴到文本字段中,它就会为您输出相应的 HAML。它也接受纯 HTML。我还没有看到它吐出不正确的语法,所以它非常适合在没有任何分歧的情况下转换现有代码。

于 2013-02-06T22:48:10.970 回答
0

我有这个问题很多天了,但是在发布这个之后,我有了洞察力并解决了我自己的问题。

将行的开头从“=”替换为“-”可以解决此问题,因为这会使 HAML 不插入 ruby​​ 代码的输出。

= form_for @question do |f|
  = f.label :name
  = f.text_field :name

  - f.object.answers.build if f.object.answers.empty?    <--- fix

  = f.fields_for :answers do |builder|
    = render 'answer_fields', f: builder

  = f.submit

我在网上找到的每个示例都使用 <%= 语法中的 ERB 代码,并且我假设将它们翻译成 HAML 总是只是为了删除 <%,但我猜在这种特定情况下不会。

于 2013-02-07T12:09:18.927 回答