我有一个日期字符串:“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!
内联,那么我得到private method gsub! called for Mon, 12 Oct 2009:Date
。我只是觉得我开始了理解Ruby和Rails,然后我回到了开始!
任何人都可以帮忙吗?
GAV株系
答案 0 :(得分:2)
此代码位于何处?例如,如果它位于控制器调用的模型中,您可能希望使用:
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 :(得分:1)
查看ActiveSupport :: CoreExtensions :: Date :: Conversions。您可以定义自己的DATE_FORMATS并使用“to_formatted_s”输出它。我相信缩短的月份你想要的是“%b”
答案 2 :(得分:0)
如果您收到“未定义的方法”错误,则表示此方法从被调用的点开始无法访问。
如果您尝试从帮助程序调用它,则需要将该方法放在ApplicationHelper中,而不是ApplicationController中。如果您还希望可以从控制器访问它,那么将以下内容放在ApplicationController中:
helper_method :date_to_day_of_week
答案 3 :(得分:0)
说dt = Time.now() dt.strftime( “%a”)的 给你一天
答案 4 :(得分:0)
试试这个
def date_to_day_of_week(date)
Date.parse(date).strftime("%a").downcase
end
Ruby返回方法中评估的最后一个值,因此您无需专门返回任何内容。还有!小写!只是改变它被调用的字符串的值,而不是像你期望的那样返回值。
答案 5 :(得分:0)
你试过吗
day = Date.parse(date).strftime(“%a”)。 to_s .downcase
由于ActiveSupport
,日期方法在rails与ruby之间的工作方式略有不同