在轨道中使用关注4

时间:2015-07-26 17:28:57

标签: ruby-on-rails

我试图在我的项目中使用问题。我想建立一个方法来获得我所拥有的每个模型的法语日期。这是我的代码。目前,我得到错误:错误的参数类型Class(预期的Module)在该行中包含DateTime。

这是我的文件models / concerns / date_time.rb



module DateTime
  extend ActiveSupport::Concern
  def self.included(base)
    base.extend ClassMethods
    base.class_eval do
      scope :disabled, -> { where(disabled: true) }
    end
  end


  # methods defined here are going to extend the class, not the instance of it
  module ClassMethods
    def date_string
      h = {1=>'Janvier',2=>'Février',3=>'Mars',4=>'Avril',5=>'Mai',6=>'Juin',7=>'Juillet',8=>'Août',9=>'Septembre',10=>'Octobre',11=>'Novembre',12=>'Décembre'}
      "#{self.created_at.day}-#{h[self.created_at.month]}-#{self.created_at.year}"
    end
  end
end




这是我的文件models / requirements.rb



class Demand < ActiveRecord::Base
  include DateTime
  belongs_to :skill
  belongs_to :project
  belongs_to :user
  has_many :transactions
  validates :project, presence: true
  validates :skill, presence: true
  validates :title, presence: true
end
&#13;
&#13;
&#13;

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

请改用Rails built in I18n functionality。在模型层中进行本地化是错误的。模型应该只关注数据和业务逻辑 - 而不是如何呈现数据(如日期)。

答案 1 :(得分:2)

你的直接问题是,因为DateTimeclass in the Ruby standard library,Ruby正在尝试包含该类,而不是你的模块。如果您将模块重命名为唯一的名称,例如UsesDateTime,则您的错误应该消失。

那就是说,对于这种特殊方法,我同意max