如何将此Ruby on Rails代码更改为Laravel?

时间:2018-10-18 09:47:39

标签: ruby-on-rails laravel

最近我已经开始学习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的初学者。

3 个答案:

答案 0 :(得分:0)

new_year_holidays?中的问号表示该方法返回布尔值,例如truefalse。代码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_holidaysisNewYearHolidaysIsNewYearHolidays

Ruby隐式返回上一次求值表达式的值。因此,在new_year_holidays?方法中,它返回的值 @new_year_holidays_finish_at,并且似乎没有返回布尔值。我会说这是一个不好的方法名称。