2015-07-26 5 views
0

Я попытался использовать проблемы в своем проекте. Я хотел бы построить метод, чтобы получить дату на французском языке для каждой модели, которую у меня есть. Вот мой код. В настоящее время я получаю ошибку: неправильный тип аргумента Класс (ожидаемый модуль) в строке включает DateTime в модели.Использование концерна в рельсах 4

Вот моя модель файла/проблемы/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

Вот мои модели файла/demands.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

Заранее спасибо за вашу помощь !

ответ

2

Вместо этого используйте Rails built in I18n functionality. Выполнение локализации в слое модели просто неверно. Модели должны учитывать только данные и бизнес-логику, а не как данные (например, даты).

+1

Кроме того, ваш метод выше будет экземпляром вместо метода класса. – max

+0

Большое спасибо за вашу помощь! Оба ваших ответа помогли мне понять мою ошибку :) – saraf

2

Ваша немедленная проблема заключается в том, что DateTime - это class in the Ruby standard library, Ruby пытается включить этот класс, а не ваш модуль. Если вы переименуете модуль в нечто уникальное, скажем, UsesDateTime, ваша ошибка должна исчезнуть.

Что касается этого конкретного метода, я согласен с max.