20210720のRailsに関する記事は14件です。

Rails resourcesとは

・resoucesとは Railsで定義されている7つのアクションのルーティングを自動で作成するメソッドです。 resoucesを使うことで簡単にルーティングを作成できる. routes.rb Rails.application.routes.draw do resources :コントローラー名 end ・Railsで定義されている7つのアクション アクション名 役割 index リソースの一覧を表示させる show リソースの詳細を表示させる new 投稿フォームを表示させる create リソースを追加させる edit 更新フォームを表示させる update リソースを更新させる destroy リソースを削除する 複数のコントローラーのルーティングを下のように一行で定義することができます。 routes.rb Rails.application.routes.draw do resources :コントローラー名, :コントローラー名 end # (例)officesコントローラーとusersコントローラーの7つのアクションのルーティングが作られる resources :offices, :users `
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Ruby on Railsにおけるajax処理について

アプリケーションで取り扱いデータの処理内容が多くなってきたり、大容量データをデータベースとやり取りする時にAjaxを使用してデータ通信をすることでパフォーマンスの改善につながります。 ajaxを使用しないと更新の際データ通信時間が長すぎて503エラーが出たりするのに対して、ajax処理を導入することでエラーを回避したりできるメリットなどもあるようです。 環境情報 まず環境によってコードの書き方などが変わって来るらしいので私のrails環境を記入しときます。 ruby2.6.5 rails 6.0.4 基本的なajaxの使い方 railsに限らずajaxの一般的な使い方はこちらのような内容になります。 一般的なアプリケーションだとボタンなどをクリックするアクションをしてから読み込み処理をしてそれからサーバー再度でどのような返答をすればいいかの処理を決めてという風なやり取りをスレうするのに対してajaxだとユーザーからのアクションをしなくてもJavaScript側から取得できるすべてのイベントからリアルタイムにイベントを発火させることができる。非同期通信でページ遷移なしで スムーズにフロントエンド側に結果を反映できるのが特徴です。 データをすべて読み込んでから結果を返すやり方だとユーザー側もその間待たなくちゃいけないので、リアルタイムでやり取り出来て必要最低限のアプリケーションを動かすことになるのでユーザビリティーやアクセシビリティーの向上にもつながると思います。 Railsでのajax処理の書き方 RubyOnRailsではView側のヘルパーメソッドに(form_tag)などで:remote=>trueを指定してあげることでajax導入を導入することができます、特にGemを使用するなどのことはなく非常に簡単に導入できます。 inbdex.html.erb <%= form_tag({:controller => '<コントローラ名>', :action => 'index'}, :remote => true, :class => 'hoge') do -%> <%= hidden_field_tag :sample_name1, 'sample_name1' -%> <%= submit_tag('Start sample', :class => 'btn btn-primary btn-sm') -%> <% end %> Controller側でその アクションに対応する処理を行い、render でレスポンスを指定します。 デフォルトではレスポンスとしてフロントエンド側にJavaScriptの処理が戻ってきます。そのレスポンス用JavaScriptは View ファイルにJavaScriptテンプレートを記述して用意します。 とりあえずこれまでです、説明できるようになったら追記します
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】特定のroutesのみを表示する方法

My Profile プログラミング学習歴②ヶ月目のアカウントです! プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。 また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。 もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。  対象者 rails routesをよく使用する方 目的 grepを使って特定のroutesのみを表示して探す手間を省く 実際の手順と実例 1.特定のroutesのみ取得 terminal. rails routes | grep hoge チームで開発する際にroutesが多すぎて探すのに時間がかかっている方にかなりおすすめです! hoge部分にはroutes上に存在する文字列であれば表示できます! 活用してスムーズな開発につなげてください!! 参照 bundle exec rails routesで特定のroutesのみ表示する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails] ActiveStrageの画像の保存先をAmazon S3にする②~バケット作成~

はじめに 前回の続きです。AmazonS3に画像を保存するために、保存先であるバケットを作成します。 バケットの作成 AWSにルートユーザーでログインします。 検索フォームにS3と入力して、S3をクリックします。 バケットを作成と書かれたボタンをクリックします。 バケット名を入力します。名前は自由に決めて大丈夫です。 リージョンというところは「アジアパシフィック(東京) ap-northeast-1」を選択してください。 ブロックパブリックアクセスのバケット設定というところですが、 まず、「パブリックアクセスを全てブロック」のチェックを外し、 「新しいパブリックバケットポリシーまたはアクセスポイントポリシーを介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」 と 「任意のパブリックバケットポリシーまたはアクセスポイントポリシーを介したバケットとオブジェクトへのパブリックアクセスとクロスアカウントアクセスをブロックする」 と最後の警告のところの三つにチェックを入れます。↓ その後は何も入力せずに「バケットを作成」をクリック これでバケットの作成が完了したはずです。 セキュリティー対策 バケットポリシーを設定 バケットポリシーというものを使用してアクセス制限の設定をします。 前回作成したIAMユーザーのみがこのバケットにアクセスできるように設定します。 まずはIAMを検索から探し、クリックします。 それから「ユーザー」という項目をクリックすると、前回作成したユーザーが出てくるので名前をクリックします。 「ユーザーのARN」と書かれた情報が出てくるはずです。コピーができるようになっているはずなのでコピーして、一時メモアプリなどに保存しておいてください。 続いてS3の方に戻ります。同じように検索でS3と入力してバケットのページへ移動してください。 作成したバケット名をクリックして画面中央の「アクセス許可」というところをクリックしてください。 スクロールすると、バケットポリシーという項目が出てくるので編集をクリックし下記を貼り付けてください。 バケットポリシー { "Version": "2012-10-17", "Id": "Policy1544152951996", "Statement": [ { "Sid": "Stmt1544152948221", "Effect": "Allow", "Principal": { "AWS": "①" }, "Action": "s3:*", "Resource": "arn:aws:s3:::②" } ] } 貼り付けたら、「①」のところに先ほどコピーした「ユーザーARN」を入力します。 「②」に作成したバケット名を入力します。 しっかり確認し間違えがなかったら、変更を保存をクリックして完了です。 もし不明なエラーが出たら下記のことを確認してください ・「①」の箇所に「ユーザーARN」を記述できているか ・「②」の箇所に「作成したバケット名」を記述できているか ・ダブルクォーテーション("")を消してしまっていないか ・全角スペースを入れてしまっていないか これでバケット作成完了です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】validates :<symbol name>, presence: true の意味

背景 Railsのコードを読んでいてvalidates :<symbol name>, presence: trueというコードを見つけ、このシンタックスがわからなかったので調べてみることにしました。 Validations presence Railsガイドに記載されていたコードですが、以下のようにPersonクラス内でname属性に対してvalidationを設定したとします。 class Person < ApplicationRecord validates :name, presence: true end これによってレコード作成時にname属性がnilの場合、レコードが作成されなくなり、かつvalid?メソッドがfalseを返すような挙動に変わります。 Person.create(name: "Bob").valid? # => true Person.create(name: nil).valid? # => false 参考文献: Active Record Validations
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveHashの特定の数字を表示させない(条件分岐)

はじめに hotel_type.rb class HotelType < ActiveHash::Base self.data = [ { id: 1, name: '選択して下さい' }, { id: 2, name: '宿泊施設ではない' }, { id: 3, name: 'ホテル' }, { id: 4, name: '旅館' }, { id: 5, name: 'コテージ' }, { id: 6, name: 'メゾネット' }, { id: 7, name: 'アネックス' }, { id: 8, name: '民泊' }, { id: 9, name: 'キャンプ' }, { id: 10, name: '農家民泊' }, { id: 11, name: '国民宿舎' }, { id: 12, name: '休暇村' }, { id: 13, name: 'その他' } ] include ActiveHash::Associations has_many :model end このように宿泊施設ではないを選んだ時-が出るようにしたいなと思い、条件分岐を使って表示させました。 最初から{ id: 2, name: '-' }こうしろよと意見があると思いますが意味があってこのようにしたのでご了承下さい・・・ やった事 宿泊施設ではないを選んだ時、-が表示される それ以外は通常通り表示される この事から条件分岐が必要とする事が分かりました。 <% if 条件式%> <p>-</p> <%else%> <%= @model.hotel_type.name %> <% end %> こんな感じになると思います。 結論 ActiveHashは数字がDBに保存されます。なので数字で条件式を作ります。 if @model.hotel_type_id == 2 この条件式ではhotel_type_idのidが2だった場合という形になります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

herokuでアプリを修正して更新するとき

herokuでアプリを公開しているものを更新するとき まずherokuは「gitと連携して、gitに保存した内容をデプロイ」している。 なので、変更したいときは次のコマンドを使う terminal % git add -A % git commit -m "Update application" % git push heroku master またテーブル追加や内容変更などをした場合は次のコマンドも実行する terminal % heroku run rails db:migrate
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

railsコンソール:実行環境の切替え

はじめに テストコードを書く際に、データベースに値を入れて検証したいと思ったが コンソールがデフォルトだとdevelopment(開発環境)だと気づく。 テスト環境や本番環境など、別環境への切替方法を調べたので 記録として残しておく。 ■使用データベース: MySQL 実行環境の種類 実行環境は3つ存在するので、状況に応じて切り替えする。 開発環境 (development) テスト環境 (test) 本番環境 (production) コンソール 記述したコードが正しく動作しているかを確認するもの。 rails cコマンドで起動できる。 ただし、デフォルトは開発環境。 % rails c Running via Spring preloader in process 25986 Loading development environment (Rails 6.1.4) irb(main):001:0> 現況確認 コンソール画面で、Rails.envコマンドで実行すると 現在の実行環境が返答される。 irb(main):001:0> Rails.env => "development" 環境を切替え コンソールから抜け出した後、linuxコマンドを打つ。 返答はないが、export RAILS_ENV=testコマンドで 実行環境がテスト環境に変わっている。 % export RAILS_ENV=test もし本番環境に変更したい場合は export RAILS_ENV=productionとする。 コンソールを起動 再びrails cコマンドを実行する。 % rails c Running via Spring preloader in process 26085 Loading test environment (Rails 6.1.4) irb(main):001:0> すると、表示されている環境が development → testに変更されているのが分かる。 データベースへ値の入力 Userモデルに、新規ユーザーを作成してみる。 ちゃんと、データが作成されている様子。 irb(main):001:0> User.create(name: "Test", email: "test@mail.com", password: "1122334455") TRANSACTION (0.3ms) BEGIN User Exists? (0.4ms) SELECT 1 AS one FROM `users` WHERE `users`.`email` = 'test@mail.com' LIMIT 1 User Create (0.4ms) INSERT INTO `users` (`name`, `email`, `created_at`, `updated_at`, `password_digest`, `activation_digest`) VALUES ('Test', 'test@mail.com', '2021-07-20 04:33:44.655390', '2021-07-20 04:33:44.655390', '$2a$04$ScRQSjFBEzENKlmFvdh7jug0nhwLmMtjFwH2GLdapCbiEab5pk24O', '$2a$04$PYLIqUcQuXZKmv2vcq71s.FzWgPmjTBk35.Rcf4HonQYYFm1qoBCC') TRANSACTION (0.6ms) COMMIT MySQLで確認 showコマンドで存在するテーブルを確認後、 select文で表示カラムをnameとemailに設定して表示させる。 mysql> show tables; +--------------------------------+ | Tables_in_<アプリ名>_test | +--------------------------------+ | articles | | relationships | | users | +--------------------------------+ mysql> select name, email from users; +------+-------------------+ | name | email | +------+-------------------+ | Test | test@mail.com | +------+-------------------+ ちゃんと、ユーザーが作成されているので上手くいっているはず。 番外:DBに保存せずに検証したい 下記コマンドなら、コンソール終了後にロールバックされるので DB上にデータが残らない。 検証はしたいが、データは残したくない場合に便利。 % rails c --sandbox Running via Spring preloader in process 26196 Loading development environment in sandbox (Rails 6.1.4) Any modifications you make will be rolled back on exit 終わりに 簡単な内容ではあるが、まとめてみた。 今後も学習記録を残す。 以上。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

formオブジェクト(ActiveModel)を用いたタグ機能(タグ検索)

説明 自分はformオブジェクトを用いてタグ機能は実装したのですが、投稿はともかく編集、削除、検索などは記事が少なく、あっても複雑で苦労したのでいくつかに分けて投稿したいと思います。今回はタグをクリックするとそのタグのついた投稿の一覧に飛ぶ機能を解説します。 前提条件 この記事は複数投稿編、編集、削除編を閲覧していただいている前提の解説となります。 完成コード routes.rb resources :tweets do collection do get 'search' get 'search_tag' get 'search_incre_tag' get 'search_tags' get 'search_status' get 'search_job' end resources :comments, only: [:create] resources :likes, only: [:create, :destroy] end _tweet.html.erb(タグのビュー) <div class="search-subTtl">タグ検索</div> <div class="search-tagContainer"> <%= link_to search_tags_tweets_path, class: "search-form tag-searchBtn" do %> <i class="fas fa-tags"></i>タグで検索する <% end %> </div> tweets_controller.rb def search_tag relations = TweetTagRelation.where(tag_id: params[:tag]) @tag_tweets = [] relations.each do |relation| @tag_tweets << Tweet.find_by(id: relation.tweet_id) end end search_tag.html.erb(タグ関連の投稿一覧のビュー) <% if @tag_tweets != [] %> <% @tag_tweets.each do |tweet| %> <li class='tweet-list'> <%= link_to tweet_path(tweet.id), remote: true, class: "show-link" do %> <%= render partial: "shared/tweet", locals: { tweet: tweet } %> <% end %> </li> <% end %> <% end %> コード解説 routes.rb resources :tweets do collection do get 'search' get 'search_tag' get 'search_incre_tag' get 'search_tags' get 'search_status' get 'search_job' end resources :comments, only: [:create] resources :likes, only: [:create, :destroy] end _tweet.html.erb(タグのビュー) <% if tweet.tags != [] %> <div class="tweet-tags"> <ul class="tweet-tagList"> <% tweet.tags.each do |tag| %> <%= link_to search_tag_tweets_path(tag: tag), method: :get, class: "tag-link" do %> <div class="tag-name">#<%= tag.name %></div> <% end %> <% end %> </ul> </div> <% end %> まずget 'search_tag'をルーティングに記述します。この時idが必要なのでcollectionで囲みます。そしてビューには繰り返し文でタグを表示し、リンクに先ほど作ったルーティングのsearch_tag_tweets_path(tag: tag)を記入し、引数には投稿に関連したtagの情報を入れるため(tag: tag)を記入します。 tweets_controller.rb def search_tag relations = TweetTagRelation.where(tag_id: params[:tag]) @tag_tweets = [] relations.each do |relation| @tag_tweets << Tweet.find_by(id: relation.tweet_id) end end コントローラーではまず引数でもらったタグの情報を元にrelations = TweetTagRelation.where(tag_id: params[:tag])を記述してrelationsに中間テーブルの情報を入れます。そして@tag_tweetsという空の配列を作り、そこに中間テーブルに関連した投稿を配列として入れていきます。 search_tag.html.erb(タグ関連の投稿一覧のビュー) <% if @tag_tweets != [] %> <% @tag_tweets.each do |tweet| %> <li class='tweet-list'> <%= link_to tweet_path(tweet.id), remote: true, class: "show-link" do %> <%= render partial: "shared/tweet", locals: { tweet: tweet } %> <% end %> </li> <% end %> <% end %> タグに関連した投稿一覧のビューを作ります。そこでコントローラーで作った@tag_tweetの中身の投稿を繰り返し文で取り出していき、完成です。 まとめ 以上がfromオブジェクトでのタグに関連した投稿一覧の解説となります。閲覧ありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Sidekiqが死んだままサービス運用をしてしまった際の復旧手順について

1. 現状蓄えられているQueueを確認 > stats = Sidekiq::Stats.new > stats.queues → { "default" => 100, "mailers" => 400 } keyはQueueの名前、valueはQueue内のJob数です。 2. すべてのJobを削除 stats.queues.keys.each do |queue_name| queue = Sidekiq::Queue.new(queue_name) queue.each do |job| # 特定のjobだけを消したい場合はなんかしらのガード文を書く # next unless job.klass == "SampleWorker" job.delete end end 3. Queueが消えているかを確認 > stats.queues → { "default" => 0, "mailers" => 0 } 4. 再起動 5. チームメンバーへ謝罪 参考 https://qiita.com/dany1468/items/20cf0dfc40d589993bda https://www.it-swarm-ja.com/ja/ruby-on-rails/%E3%82%AD%E3%83%A5%E3%83%BC%E5%86%85%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%80%81sidekiq%E3%81%A7%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%99%E3%82%8B%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F/1069431510/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails]バリデーションのエラーメッセージを3ステップで日本語化

過去の記事 [Rails]よく使うバリデーションまとめ [Rails]フラッシュメッセージとエラーメッセージ違いと実装方法 で、 バリデーションによるエラーメッセージの表示を解説して、実装しましたが、デフォルトではエラーメッセージが英語のままなので、日本語化していきます。 開発環境 ruby 2.6.3 Rails 5.2.6 3ステップ エラーメッセージを日本語化するには3ステップです! ①rails-i18nをインストール ②デフォルトの言語を日本語にする ③カラム名も日本語化する ①rails-i18nをインストール エラーメッセージを日本語化するには、rails-i18nというgemを使います。 Gemfileに追加します。 gem 'rails-i18n' 追加したら、インストールします。 $bundle install これで、rails-i18nをインストールできました。 ②デフォルトの言語を日本語にする 次に、デフォルトの言語を日本語に設定します。 config/application.rbに設定を追加していきます。 config/application.rb : module SampleApp class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.2 # Settings in config/environments/* take precedence over those specified here. # Application configuration can go into files in config/initializers # -- all .rb files in that directory are automatically loaded after loading # the framework and any gems in your application. # 以下一文を追加 config.i18n.default_locale = :ja end end これで、デフォルトの言語を日本語に設定できました。 サーバーを再起動して試してみてください。 これだけでカラム名以外は、日本語で表示ができています。 ③カラム名も日本語化する カラム名は各Webサービスによって、表示したい名前も変わってくると思うので、開発者側で設定する必要があります。 config/locales配下にja.ymlファイルを作成してその中に、モデル、カラム名の設定を記述していきます。 基本形 ja: activerecord: models: モデル名: 表記したい名称 attributes: モデル名: カラム名: 表記したい名称 カラム名: 表記したい名称 基本はこのような形で記述していきます。 表記したい名称には、imageカラムなら「画像」が入ります。 これだけだとわかりにくいと思うので、実際に記述したコードを載せておきます。 モデルは、以下です。 User Post Comment Like Contact config/locales/ja.yml # エラーメッセージのカラム名日本語化 ja: activerecord: # 全てのモデル記載 models: user: ユーザー post: 投稿 comment: コメント like: いいね contact: お問い合わせ attributes: # 各モデルのカラム名を記載 user: name: 名前 email: メールアドレス password: パスワード post: content: 説明 image: 画像 comment: comment: コメント内容 contact: name: 名前 email: メールアドレス content: お問い合わせ内容 これで、カラム名も任意の名前に変更できました。 確認してみてください。 まとめ エラーメッセージを日本語化するには3ステップです! ①rails-i18nをインストール ②デフォルトの言語を日本語にする ③カラム名も日本語化する エラーメッセージをかんたんに実装することができました。 あらためてgemの偉大さを痛感しました!(かんたんすぎ) 最後まで見ていただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

カート機能①カート内商品の合計金額を出す inject 税込価格の表示 / ECサイト

はじめに カート機能を作成中です。今回はカート内商品の合計金額を出すやり方を学習しました。 前提条件 ここで登場するテーブル・モデルは、 Customer Item Cart_item です。←(CustomerとItemの中間テーブルになる。) (Cartモデルを作成している記事が多いですが、Cartモデルは作成していません。) *ログインしなくても商品の閲覧はできるが、カートには入れられない。 マイグレーションファイル customer_id,item_idは外部キーで、個数はnull:falseにしています。 マイグレーションファイル class CreateCartItems < ActiveRecord::Migration[5.2] def change create_table :cart_items do |t| t.integer :item_id t.integer :customer_id t.integer :quantity,null: false t.timestamps end end end モデルファイル class CartItem < ApplicationRecord belongs_to :item belongs_to :customer validates :item_id, :quantity, presence: true validates :quantity, numericality:{ only_integer: true } def sum_of_price item.taxin_price * quantity end end カート内しょうひんの合計金額を出すところで重要なのは、 def sum_of_price item.taxin_price * quantity endです。 sum_of_priceで、ある商品の税込価格❌数量が出るようにしました。 taxin_priceというのは、item.rbで定義しています。 item.rb def taxin_price price*1.1 end itemのテーブルには税抜価格であるpriceというカラムを作成しており、 taxin_priceというカラムはありませんが、ここで定義することにより、item.taxin_priceで税込価格が取り出せるようになりました。 以下の記事を参考にしました。 最難関 コントローラー cart_items_controller.rb def index @cart_items= current_customer.cart_items.all # カートに入ってる商品の合計金額 @total = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price } end カート内商品の一覧画面で、カート内商品の合計金額を算出します。 モデルファイルの記述や、 @total = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price }は、以下の記事を参考に記述し、実装しましたが、初心者にはコードの意味が理解できなかったので、、 読み解いていきたいと思います。 コードの解読 @total = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price } inject(0)って何?? 配列の合計を算出するらしい。 配列オブジェクト.inject {|初期値, 要素| ブロック処理 }が基本の形 inject(0)の(0)は、初期値は0ですよ〜ということのよう。 { |sum, item| sum + item.sum_of_price }で行ってることは? 1回目の動作 @cart_itemsから、カートに入ってる1つ目のitem取り出して、 sumにitem.sum_of_priceを足す。(sumの初期値は inject(0)で0) 2回目以降の動作 次のitem取り出して、sumにitem.sum_of_priceを足す。 これで、最終的にカート内商品の合計金額が出る!!! injectは”注入” sumにモデルで定義してるitem.sum_of_priceがどんどん注入されてくイメージ! 以下の記事で理解できました! viewファイル cart_item.html.erb ¥<%= @total.round.to_s(:delimited)%> これで合計金額出せました!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Rails】関連付けメソッドのキャッシュ制御

はじめに Rails には、関連先のメソッドを呼び出す時に、キャッシュを使用することで高速化する仕組みがあります。 しかし、キャッシュではなく、データーベースから直接読み込みしたい場合があると思います。 今回はそのような場合のキャッシュ制御方法についてご紹介したいと思います。 関連性 以下のようなAnimalモデル、Pandaモデルの構成を作成します。 animal.rb class Animal < ApplicationRecord has_many :pandas end panda.rb class Panda < ApplicationRecord belongs_to :animal end キャッシュ制御 reloadメソッド を使用することで、キャッシュを破棄してくれます。 animal = Animal.first animal.pandas # データベースから pandas を取得する animal.pandas.size # pandas のキャッシュコピーが使われる animal.pandas.reload.empty? # pandas のキャッシュコピーが破棄される # その後データベースから再度読み込まれる まとめ まだまだ知らないことが多いので、引き続き勉強ですね〜 参考 Railsガイド - キャッシュ制御 https://railsguides.jp/association_basics.html#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E5%88%B6%E5%BE%A1
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

authenticate_user! メソッドが効かない

行いたい事  「出品」ボタンを押したときに、ユーザーがログインをしていなければログイン画面に飛ぶようにしたい。 item_controller.rb class ItemController < ApplicationController before_action :move_to_index, except: :index before_action :authenticate_user!, except: :index def index end def new end def create end private end 上記の様に $ authenticate_user! メソッドをbefore_actionで書いてみたが、ログイン画面に遷移しない・・・・なぜ?? before_actionの順番を変える事で解決しました。 item_controller.rb class ItemController < ApplicationController before_action :authenticate_user!, except: :index before_action :move_to_index, except: :index def index end def new end def create end private end コードは上から順番に読み込まれるので、 ログインページに飛ばしてくれるメソッド  よりも index以外のアクションをしようものなら問答無用にトップページに飛ばしてしまう   メソッドが先に働いてしまっていた。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む