Как изменить этот код Ruby on Rails на Laravel? - PullRequest
0 голосов
/ 18 октября 2018

Недавно я начал изучать Ruby on Rails.В настоящее время я конвертирую существующий проект ruby ​​on 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 голосов
/ 18 октября 2018

В 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, пользователь увидит блок с датами праздников

0 голосов
/ 18 октября 2018

Вопросительный знак действителен в конце имени метода в мире Ruby.

Это просто соглашение, которое означает, что он будет возвращать логическое значение.В соглашении других языков это может быть is_new_year_holidays, isNewYearHolidays или IsNewYearHolidays

Ruby неявно возвращает значение последнего оцененного выражения.Таким образом, в методе new_year_holidays? он возвращает значение @new_year_holidays_finish_at и, похоже, не возвращает логическое значение.Я бы сказал, что это плохое имя метода.

0 голосов
/ 18 октября 2018

Знак вопроса в new_year_holidays? указывает, что метод возвращает логическое значение, например true или false.Код new_year_holidays?, кажется, определяет, является ли текущий день новогодним праздником или нет.

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