2013-02-06 26 views
0

我在Rails中從ERB遷移到HAML時有一個簡單的視圖。這個視圖呈現一個嵌套的表單,但包含一個空的子對象,它沒有任何現有的子對象。將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 

這簡直是同樣的事情,但該局工作和HAML,雖然它的工作原理,它也打印#<Answer:0xb159004>附近的形式,這我不知道如何擺脫。

我做錯了什麼或者這是HAML限制/錯誤?有什麼解決方法嗎?

+2

你可以在你的answer_fields模板文件中發佈代碼嗎? – Magicmarkker

+0

嗨@Magicmarkker,上面的代碼只是一個例子來顯示這種奇怪的行爲。對於這個例子,我實際上使用了一個來自[railscast 196](http://railscasts.com/episodes/196-nested-model-form-revised)的簡單例子來說明這個問題。即使沒有fields_for或渲染線,HAML仍會顯示'#<....>'字符串。 –

+0

好的,我修好了。我只需要將從「=」開始的行替換爲「 - 」,這樣HAML就不會插入輸出!不管怎麼說,還是要謝謝你! –

回答

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總是隻刪除<%,但不是我想這種特殊情況下。

0

這不會直接解決您的問題,但我總是使用http://html2haml.heroku.com/將現有的erb模板切換到HAML。只需將現有的erb代碼複製並粘貼到文本字段中,它就會爲您輸出相應的HAML。它也接受純HTML。我還沒有看到它吐出了不正確的語法,所以它很適合轉換現有的代碼而沒有任何分歧。

+0

這是一個非常酷的網站!謝謝! –