【问题标题】:Three text fields for one database entry for railsRails 的一个数据库条目的三个文本字段
【发布时间】:2013-05-04 10:40:55
【问题描述】:

我目前有一个用于日期条目的文本字段,我试图将年、月和日分成三个单独的条目,用“/”分隔。原始文本条目如下所示:

<%= f.text_field :date, :placeholder => 'YYYY/MM/DD' %>

我想把它分成三个text_fields,并将它们附加在一起,并将其放入数据库中的日期条目中。 我该怎么做?

【问题讨论】:

    标签: ruby-on-rails database forms textfield


    【解决方案1】:

    您经常使用文本字段作为日期,因为您只需要一个字段。当您拥有三个不同的字段时,您应该考虑使用 select 代替。 Rails 有一个日期辅助方法date_select,所以它会是这样的:

    <%= f.date_select :date %>
    

    这会创建一个选择年、一个月和一个天。 你可以阅读更多http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-date_select

    【讨论】:

      【解决方案2】:

      尝试使用https://github.com/plataformatec/simple_form

      <%= f.input :deadline, :start_year => Date.today.year, :end_year => Date.today.year + 1, :order => [:day, :month, :year] %>
      

      你有很多选择吗?

      【讨论】:

        【解决方案3】:

        为模型添加三个虚拟属性:

        attr_accessor :form_month, :form_day, :form_year
        

        然后将以下内容放入控制器中,而不是模型中:

        def create
          # ...
          form_date = [ params[:form][:form_month], \
                        params[:form][:form_day]  , 
                        params[:form][:form_year] ].join("/")
        
          @my_model.date = Date.parse(form_date)
        
          # ... save and return ...
        end
        

        最好手动检查每个表单参数的有效性。如果输入不完整的日期字符串,Date#parse 可能会吐出不正确的日期。

        Date.parse "2005/11/4"
        # => Fri, 04 Nov 2005
        
        Date.parse "/11/4"
        # => Mon, 04 Nov 2013
        

        【讨论】:

          猜你喜欢
          • 2011-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 2018-09-15
          相关资源
          最近更新 更多