LoginSignup
2
1

More than 3 years have passed since last update.

Rails おすすめの商品を表示させる(whenener)

Posted at

環境

Ruby'2.6.3'
Rails '5.2.4'

wheneverのgemを入れます。

Gemfile
gem 'whenever', require: false
ターミナル
$ bundle install
$ bundle exec wheneverize

config/schedule.rbファイルが作られますので最後に記述します。

config/schedule.rb
every 1.minute do #every 2.hours, every 4.daysなど変更できます。
  begin
    runner "Batch::DataReset.data_reset"#cronで起動するファイルです。

  rescue => e
    Rails.logger.error("aborted rails runner")
    raise e
  end
end

config/schedule.rbに記述した内容がcrontabに反映されます。
次にlib/batch/data_reset.rbを作成します

lib/batch/data_reset.rb
class Batch::DataReset
  def self.data_reset
    Recommendation.destroy_all#Recommendationの中の空にします
    Item.all.shuffle.take(3).each do |item|
      Recommendation.create(recommendation_params(item))
    end
    #商品全て中から3つランダムに取得
    #Recommendationの中に商品を追加させる
    p "おすすめの商品"

  end
    #ストロングパラメータででgenre_id,item.user_id,item.idを判定する。
  def self.recommendation_params(item)
    {
      genre_id: item.genre_id,
      user_id: item.user_id,
      item_id: item.id
    }
  end
end
ItemsController.er
@recommendations = Recommendation.all#表示させたいところに記述
items/view.erb
<p>おすすめのアイテム</p>
 <% @recommendations.each do |recommendation| %>
   <%= link_to item_path(recommendation.item) do %>
     <%= recommendation.item.name %>
   <% end %>
<% end %>
ターミナル
 $ bundle exec whenever
 $ bundle exec whenever --update-crontab

cronへ反映させます。
ファイルなど変更をした際は
$ bundle exec whenever --update-crontab
を入力し、反映させてください。

ターミナル
crontab -l
crontab -e

crontab -lは情報が確認できます。
crontab -eは直接cronの編集ができます。

ターミナル
sudo systemctl start crond
sudo systemctl stop crond

二つのコマンドは
cronの起動と停止ができます。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1