加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在Rails表单对象中处理日期的最佳方法是什么

发布时间:2020-12-17 02:05:22 所属栏目:百科 来源:网络整理
导读:我正在使用 7 Patterns to Refactor Fat ActiveRecord Models #3中描述的表单对象,目前我在存储日期方面存在问题. 这就是我所做的: class MyModelForm # ... def initialize(my_model: MyModel.new,params: {}) @my_model,@params = my_model,params @my_mo
我正在使用 7 Patterns to Refactor Fat ActiveRecord Models #3中描述的表单对象,目前我在存储日期方面存在问题.

这就是我所做的:

class MyModelForm
  # ...

  def initialize(my_model: MyModel.new,params: {})
    @my_model,@params = my_model,params
    @my_model.date_field_on = Date.from_params @params,"date_field_on" if @params.present?
  end
end

Date.from_params的实现方式如下:

class Date
  def self.from_params(params,field_name)
    begin
      year = params["#{ field_name }(1i)"]
      month = params["#{ field_name }(2i)"]
      day = params["#{ field_name }(3i)"]

      Date.civil year.to_i,month.to_i,day.to_i if year && month && day
    rescue ArgumentError => e
      # catch that because I don't want getting error when date cannot be parsed (invalid)
    end
  end
end

我不能只使用@ my_model.assign_attributes @params.slice(* ACCEPTED_ATTRIBUTES)因为我的params [“date_field_on(< n> i)”]将被跳过并且不会存储日期.

有没有更好的方法来使用表单对象处理日期字段?

解决方法

正如@davidfurber在评论中提到的,它与 Virtus gem一起使用效果很好.

class MyModelForm
  include Virtus

  # ...
  attribute :date_field_on,Date

  def initialize(params: {})
    @my_model.assign_attributes params
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读