Преобразование строки даты - PullRequest
2 голосов
/ 13 октября 2009

У меня есть строка с датой: "2009-10-12". Я хотел бы написать метод, который принимает это в качестве параметра и возвращает трехбуквенный день недели (в данном случае 'mon'). Я написал это:

def date_to_day_of_week(date)
  d = Date.parse(date).strftime("%a").downcase!
  return d
end

Когда я вызываю это из скрипта / консоли, оно работает как положено. Однако, когда я вызываю это из моего приложения, я получаю различные ошибки в зависимости от того, что я делаю. Основные проблемы заключаются в том, что либо date_to_day_of_week является неопределенным методом, либо, если я перемещаю содержимое метода (т.е. day = Date.parse(date).strftime("%a").downcase! inline, то получаю private method gsub! called for Mon, 12 Oct 2009:Date. Я просто думаю, что начинаю понимать Ruby и Rails и тогда меня отбрасывают обратно на старт!

Может кто-нибудь помочь с этим?

Гав

Ответы [ 6 ]

2 голосов
/ 30 декабря 2009

Где находится этот код? Например, если это модель, вызываемая контроллером, вы можете использовать:

def self.date_to_day_of_week(date)
  d = Date.parse(date).strftime("%a").downcase!
  return d
end

И вызовите его в вашем контроллере с помощью:

def index
  # ...
  @date = Model.date_to_day_of_week("2009-12-30")
end
1 голос
/ 13 октября 2009

Посмотрите на ActiveSupport :: CoreExtensions :: Date :: Conversions. Вы можете определить свои собственные DATE_FORMATS и вывести их с помощью «to_formatted_s». Я верю, что вы хотите, чтобы сокращенный месяц был "% b"

0 голосов
/ 20 января 2010

Вы пробовали

day = Date.parse (date) .strftime ("% a"). to_s .downcase

Из-за ActiveSupport методы date работают в рельсах немного иначе, чем в ruby.

0 голосов
/ 13 октября 2009

попробуйте

def date_to_day_of_week(date)
  Date.parse(date).strftime("%a").downcase
end

Ruby возвращает последнее значение, оцененное в методе, поэтому вам не нужно ничего специально возвращать. Так же ! в нижнем регистре! просто изменяет значение строки, к которой он был вызван, а не возвращает значение, как вы ожидаете.

0 голосов
/ 13 октября 2009

скажем, dt = Time.now () dt.strftime ( "% A") дает вам день

0 голосов
/ 13 октября 2009

Если вы получаете ошибку «неопределенный метод», это означает, что этот метод недоступен с момента его вызова.

Если вы пытаетесь вызвать его из помощника, вам нужно поместить метод в ApplicationHelper, а не в ApplicationController. Если вы также хотите, чтобы он был доступен с ваших контроллеров, поместите в ApplicationController следующее:

helper_method :date_to_day_of_week
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...