最近我已经开始学习Ruby on Rails。我目前正在将现有的Rails红宝石项目转换为Laravel。但是由于我是Ruby on Rails的新手,所以我不了解现有部分的某些部分。
在现有的Ruby on Rails项目application_controller.rb中,有一个函数。我不了解该功能的含义。谁能解释一下代码的含义吗?
application_controller.rb
def new_year_holidays?
t = Time.now
@notification = t >= Rails.application.config.new_year_holidays_start_at &&
t <= Rails.application.config.new_year_holidays_finish_at
start_date = Rails.application.config.new_year_holidays_start_at
end_date = Rails.application.config.new_year_holidays_finish_at
@new_year_holidays_start_at = start_date.strftime("%Y年%m月%d日(#{%w(日 月 火 水 木 金 土)[start_date.wday]})")
@new_year_holidays_finish_at = end_date.strftime("%Y年%m月%d日(#{%w(日 月 火 水 木 金 土)[end_date.wday]})")
end
在他们已使用此变量通知的视图中
<% if @notification %>
<p style="border: 1px solid #dab682; background: #fef4d0; text-align: center; width:98%; margin: 0 auto 20px; padding: 10px; color:#a9692b; font-size: 14px; font-weight: bold; line-height: 1.7;">
<%= @new_year_holidays_start_at %>より<%= @new_year_holidays_finish_at %>までの年末年始の間、<br>
お見積もりや資料の発送・配送に通常よりお時間を頂く可能性がございます。ご了承ください。</div>
</p>
<% end %>
我所知道的new_year_holidays是这里的一个函数。但是我不知道为什么会有问号。而且我知道通知以及new_year_holidays_start_at
和@new_year_holidays_finish_at variable here
。在控制器中,他们使用了application_controller.rb
Kakaku::PackageEstimatesController < ApplicationControllerhere
我是Ruby on Rails的初学者。
答案 0 :(得分:0)
new_year_holidays?
中的问号表示该方法返回布尔值,例如true
或false
。代码new_year_holidays?
似乎确定当前日期是否为新年假期。
答案 1 :(得分:0)
在ruby中,通常的做法是在方法名称中使用问号,该方法会返回布尔值(true / false) 您的方法只是检查当前时间是否在节假日之内。我重构了一下
def new_year_holidays?
t = Time.now # it is better to use Time.current, it works with timezones
# it is two dates from configuration file, you can redefine them anytime
start_date = Rails.application.config.new_year_holidays_start_at
end_date = Rails.application.config.new_year_holidays_finish_at
# if current time is between start and end dates from config, @notification == true, otherwise - false
@notification = t >= start_date && t <= end_date
@new_year_holidays_start_at = start_date.strftime("%Y年%m月%d日(#{%w(日 月 火 水 木 金 土)[start_date.wday]})")
@new_year_holidays_finish_at = end_date.strftime("%Y年%m月%d日(#{%w(日 月 火 水 木 金 土)[end_date.wday]})")
end
所有@变量都在视图内可用,因此,如果@notification为true
,则用户将看到带有假日日期的区块
答案 2 :(得分:0)
在Ruby世界中,方法名称末尾的问号有效。
这只是一个约定,这意味着它将返回布尔值。按照其他语言的约定,它可能是is_new_year_holidays
,isNewYearHolidays
或IsNewYearHolidays
Ruby隐式返回上一次求值表达式的值。因此,在new_year_holidays?
方法中,它返回的值
@new_year_holidays_finish_at
,并且似乎没有返回布尔值。我会说这是一个不好的方法名称。