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

私は何日もこの問題を抱えていましたが、これを投稿した後、私は洞察を得て、自分の問題を修正しました。

行の先頭を「=」から「-」に置き換えると、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コードについて<%=構文でWeb上で見つけたすべての例では、それらをHAMLに変換することは、常に<%を削除することであると想定していましたが、この特定のケースではそうではないと思います。

于 2013-02-07T12:09:18.927 に答える
0

これはあなたの質問を直接解決するものではありませんが、私は常にhttp://html2haml.heroku.com/を使用して既存の erb テンプレートを HAML に切り替えます。既存の erb コードをコピーしてテキスト フィールドに貼り付けるだけで、対応する HAML が出力されます。プレーンな HTML も受け入れます。間違った構文を吐き出すのをまだ見ていないので、既存のコードを相違なく変換するのに最適です。

于 2013-02-06T22:48:10.970 に答える