所以我一直在学习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
我知道我的代码没有多大意义,但希望它能解释我要做什么。有人能给我指正确的方向吗。
"%date_select"不是HTML元素。您将使用"%"创建诸如%title、%p 之类的内容
您需要使用"%"直接创建HTML。在这种情况下,您可以使用"%select"%来创建s选择框。在RubyonRails中,您有一个表单助手,您将调用它来创建这样的集合。
=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
在Haml中,您使用%
来启动标记,使用=
来使用类似date_select
的辅助方法。你可以这样重写你的例子:
=label_tag :patient_dob, "DOB"
=date_select :patient, :dob, :start_year => 5.years.ago, :end_year => 5.years.from_now
其他几件事:
- 在Ruby中,使用camelCase方法名称(如
getBirthStartYear
)是非常规的。坚持使用snake_case
,您的代码将与Rails和Ruby社区的其他部分保持一致 - 从方法调用中删除括号
()
也是一个好主意。这有助于模糊什么是属性和什么是方法背后的界限,我认为这鼓励了更好的内部API设计。出于这个原因,我也鼓励你放弃get
,转而选择更有意义的东西,比如new_patient_dob_start_year
- 不过,老实说,为了简单明了,如果没有理由,我会避免制作额外的方法。
5.years.ago
或5.years.from_now
非常容易阅读,不需要另一个程序员查找方法的定义位置