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

我知道我的代码没有多大意义,但希望它能解释我想要做什么。有人可以指出我正确的方向。

4

2 回答 2

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

于 2013-02-04T21:51:38.997 回答
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 中,使用 camelCase 方法名(如getBirthStartYear)是非常规的。坚持使用snake_case,您的代码将与 Rails 的其余部分和 Ruby 社区保持一致。
  • ()从方法调用中删除括号也是一个好主意。这有助于模糊什么是属性和什么是方法背后的界限,我认为这会鼓励更好的内部 API 设计。出于这个原因,我也鼓励你放弃get更有意义的东西,比如new_patient_dob_start_year.
  • 不过,老实说,为了简单明了,如果没有理由,我会避免使用其他方法。5.years.agoor5.years.from_now非常容易阅读,并且不需要其他程序员查找定义方法的位置。
于 2013-02-04T22:02:08.460 回答