2011-01-19 35 views
2

我們使用Ruby(1.9.2)Rails(2.3)。Haml單選按鈕預選語法

我正在嘗試設置預選單選按鈕...

- form_for @user, :url => plan_user_url, :html => { :method => 'put', :class => 'form' } do |f| 
    - @plans.each do |p| 
    %span 
     %p= p[:blurb] 
     %p= p[:price] 
     - p[:features].each do |f| 
     %p= f 
     = f.radio_button {:id => p[:id], :checked => @user[:plan_id]==p[:id] || nil} 
     = f.label :plan_name, p[:name] 
    %p 
     %br 
    .spacer 

    .field.first 
    = f.submit 'Update', :class => 'button ok' 
    .field 
    = link_to 'Cancel', redirect_back_url || root_url, :class => 'button cancel' 

HAML不喜歡這一行:

= f.radio_button {:id => p[:id], :checked => @user[:plan_id]==p[:id] || nil} 

任何幫助表示讚賞。

回答

-5

感謝Brian的提示。原來

f.radio_button :plan_id, p[:id] 

作品預選。

11

這是無效的Ruby代碼:

= f.radio_button {:id => p[:id], :checked => @user[:plan_id]==p[:id] || nil} 

你試圖調用radio_button方法和Ruby覺得你傳遞一個塊,但真正你傳遞一個Hash。這是更好的:

= f.radio_button :id => p[:id], :checked => @user[:plan_id]==p[:id] || nil 

,消除ProcHash之間的模糊性,但它仍然是怪異。你爲什麼想要|| nil?我認爲這是沒有必要的:

= f.radio_button :id => p[:id], :checked => @user[:plan_id] == p[:id] 
+0

謝謝Brian。我明白你在說什麼。我想你的建議,並得到了這個 顯示應用程序/視圖/用戶/ plan.html.haml其中線#22提出: 錯誤的參數數目(1 2) 20: - P [:功能] .each do | f | 21:%p = f 22:= f.radio_button:id => p [:id],:checked => @user [:plan_id] == p [:id] 23:= f.label:plan_name ,p [:name] 任何想法? – Mei 2011-01-20 00:46:50

+1

`radio_button`調用必須映射到'form_for`調用使用的任何對象的值,因此它看起來像你想`f.radio_button:plan_id`。 – 2011-01-20 16:54:08