2013-02-04 43 views
0

所以我一直在學習ror並嘗試一些形式的例子。 網絡中的大多數示例都採用erb格式,我的文件採用.haml格式。我試圖寫一個靜態dob字段,它需要一天,一年,一年。哈姆和軌道上的紅寶石日期出生日期字段語法

view 
%label{:for => "patient_dob"} DOB 
    %date_select {Date.today,start_year => getBirthDateStart(), :end_year => getBirthDateEnd() } 

module ApplicationHelper 
def getBirthDateStart() 
    Time.now.year - 100 
end 

def getBirthDateEnd() 
    Time.now.year 
end 
end 

我知道我的代碼沒有什麼意義,但希望它解釋我正在嘗試做什麼。有人能指出我正確的方向嗎?

回答

5

「%date_select」不是HTML元素。您將使用「%」來創建諸如%title,%p的內容

您會希望使用「%」直接創建HTML。在這種情況下,您可以使用「%select」%創建選擇框。在Ruby on Rails中,你有形式助手,你可以調用它來創建這樣的集合。

=label_tag "patient_dob", "DOB" 
=date_select "patient", "dob", { start_year: 100.years.ago.year, end_year: Date.today.year, default: Date.today} 

文檔:http://apidock.com/rails/ActionView/Helpers/DateHelper/date_select

1

在Haml的,你用%啓動標籤,並=使用一個輔助方法一樣date_select。你可以重寫你的例子是這樣的:

=label_tag :patient_dob, "DOB" 
=date_select :patient, :dob, :start_year => 5.years.ago, :end_year => 5.years.from_now 

一些其他的東西:

  • 在Ruby中,使用駝峯法的名字(例如getBirthStartYear)是標新立異。堅持與snake_case,你的代碼將與其餘的Rails和Ruby社區一致。
  • 從方法調用中刪除括號()也是一個好主意。這有助於模糊屬性和方法的背後,我認爲這鼓勵更好的內部API設計。出於這個原因,我還鼓勵你放棄get以支持更有意義的事情,如new_patient_dob_start_year
  • 儘管如此,爲了簡單明瞭起見,如果沒有理由,我會避免使用其他方法。 5.years.ago5.years.from_now非常易於閱讀,並且不需要另一位程序員查找定義方法的位置。
+0

感謝您的tip.is有一種方法,我可以在上面的例子中將格式更改爲月份日期和年份? – Micheal

+1

是的。只需添加一個':order => [:month,:day,:year]'選項。看看http://apidock.com/rails/ActionView/Helpers/DateHelper/date_select – Aupajo