20210507のRubyに関する記事は16件です。

リンクの/book/1/とかをハッシュ化するgemのhashids.rbがめちゃ簡単に搭載できた~!

Railsでbook#showとかのメゾットだと/book/1とか/book/2とかIDがバレてしまうので、これを使うと/book/Gdwksoとか/book/kDmesrとかに勝手にしてくれる 公式読んでやってみたら15分くらいで出来てめちゃくちゃ簡単だったのでメモー! 色々変更になるかもしれないのでちゃんとしたものは公式をご参照くださいっ https://github.com/jcypret/hashid-rails ①インストール Gemfile gem "hashid-rails", "~> 1.0" console $ bundle install ②設定を行う config/initializerにhashid.rbを作成して下記を追加 config/initializer/hashid.rb Hashid::Rails.configure do |config| # The salt to use for generating hashid. Prepended with pepper (table name). config.salt = "yasashii oshio" #ここは任意に言葉を変えます # The minimum length of generated hashids config.min_hash_length = 6 # Whether to override the `find` method config.override_find = true # Whether to override the `to_param` method config.override_to_param = true # Whether to sign hashids to prevent conflicts with regular IDs (see https://github.com/jcypret/hashid-rails/issues/30) config.sign_hashids = true end "yasashii oshio"のところはENV['HASHIDS_SALT']みたいに環境変数化しても大丈夫です model class Book < ApplicationRecord include Hashid::Rails #この一行を追加 : : end hashidsを使いたいモデルに上記を追加します これで終わり! Book.find(params[:id])がオーバーライドされて勝手にハッシュのIDで何とかしてくれます(すごい) find_byを使いたいとき controller book = Book.find_by_hashid(params[:id]) これでBook.find_by(id: params[:id])のような使い方が出来、該当がない時はnilで帰ってきます。 他の使い方は分からないです・・・m(_ _)m 相違点あったら教えてくださると嬉しいです!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[AWS]Aws::Sigv4::Errors::MissingCredentialsError: Cannot load `Rails.config.active_storage.service`:

はじめに 未解決エラーについて一旦忘れないようにこちらに記載します [追記]解決しました!!とてもしょうもないミスでした、、、、 環境 ruby 2.6.5 Rails 6.0.0 エラー内容 こちらの記事を参考に、AWSへもデプロイをしていこうと進めておりましたところ、Unicorn起動がうまく行かず、、、、 [tochikawa@ip-10-0-0-132 log]$ bundle exec unicorn_rails -c /var/www/rails/soccer_app/config/unicorn.conf.rb -D -E production master failed to start, check stderr log for details とりあえずログを見てみることに、、、すると、気になる表示が!! Aws::Sigv4::Errors::MissingCredentialsError: Cannot load `Rails.config.active_storage.service`: missing credentials, provide credentials with one of the following options: あ〜credentialまわりでなんか起きているなああということで情報収集したところ、この記事に記載のことが原因かな〜と確信!! しかし、一向に治らず、、、 どうもcredentialsとmaseter.keyがうまくあってないような気がするんですが、ここは間違いなく大丈夫、、 何が原因わからないよ〜〜〜!!! [追記] 原因判明 原因は以下二つだったことが判明 1.credentials.yml.encにaccess_key等が設定されていなかった 2.storage.ymlのインデントミス 正直恥ずかしいまでに初歩的なミスです。 けれどおかげさまで、この辺りの知識メッッチャ増えました! おわりに 転職活動中のみですので、早く完成させたい!と思い焦ってしまいましたが、一度落ち着いてよくみてみるとたいしたことなかったりしますね笑
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[AWS]未解決エラー:Aws::Sigv4::Errors::MissingCredentialsError: Cannot load `Rails.config.active_storage.service`:

はじめに 未解決エラーについて一旦忘れないようにこちらに記載します 環境 ruby 2.6.5 Rails 6.0.0 エラー内容 こちらの記事を参考に、AWSへもデプロイをしていこうと進めておりましたところ、Unicorn起動がうまく行かず、、、、 [tochikawa@ip-10-0-0-132 log]$ bundle exec unicorn_rails -c /var/www/rails/soccer_app/config/unicorn.conf.rb -D -E production master failed to start, check stderr log for details とりあえずログを見てみることに、、、すると、気になる表示が!! Aws::Sigv4::Errors::MissingCredentialsError: Cannot load `Rails.config.active_storage.service`: missing credentials, provide credentials with one of the following options: あ〜credentialまわりでなんか起きているなああということで情報収集したところ、この記事に記載のことが原因かな〜と確信!! しかし、一向に治らず、、、 どうもcredentialsとmaseter.keyがうまくあってないような気がするんですが、ここは間違いなく大丈夫、、 何が原因わからないよ〜〜〜!!! おわりに 現在、原因究明中 どなたかお分かりの方いれば是非コメントを!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

visudo: /etc/sudoers がビジー状態です。後で再試行してくださいエラーへの対応

はじめに ポートフォリオサイトをAWSへデプロイする際に上記エラーが発生したため、その時の解決手順を記載します。 今回は「sudo visudo」コマンドを入力した際にエラー表示され、ターミナルでのコマンド入力が何もできなくなってしまいました。 エラー内容としては他で既にvisudoが起動しているから重複して起動できませんよーといったものだが、他で起動した記憶が全くない状況でした。 後々考えると、一度ターミナルを強制終了していたので、おそらくそのせいだと思います。 解決に向けて 結論からいくと、プロセスIDが正常に切断されていなかったことが原因でした。 そのためプロセスIDを消去してあげる必要があります。 ①ターミナル上でルートディレクトリに移動。 ※どの状態でエラーが発生したかによって、実行するディレクトリも異なってきます。例えばec2-userの状態でエラーが発生したのであれば、ルートディレクトリではなく、ec2-userにて削除を実施する必要があります。 ターミナル *****@***** ~ % *はPCのユーザー情報 ②psコマンドにてプロセスIDの確認 ターミナル *****@***** ~ %ps ③プロセスIDの削除 ②のコマンド入力で、 ターミナル PID TTY TIME CMD 10490 ttys000 0:00.14 -zsh のような表示がされると思います。 そこで該当のPID(プロセスID)を削除します。 削除するコマンドは、killもしくはkill-9となります。(kill-9は強制的に終了するコマンド) ターミナル *****@***** ~ %kill PIDの値 もしくは kill-9 PIDの値 プロセスID削除後に再度試すとエラーが発生せず動作しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

そういやmapメソッドってなんだっけ?

そういやmapメソッドって何だっけと、ふと疑問に思いまとめてみました。 mapメソッドとは mapメソッドは配列の要素の数だけブロック内の処理を実行し、作成された配列を返すメソッドです。 要素それぞれに指示した処理をしてくれます。 似たようなメソッドにはeachメソッドがありますね。 eachメソッドは戻り値は元の配列、mapはブロック処理をした後の値を集めた配列を戻り値にします。 配列を元に新たな配列を作成する場合はmapメソッドを 繰り返し処理をするだけの場合はeachメソッドを使いましょう。 mapメソッドの基本的な書き方 配列.map { |変数| 実行する処理 } # 実行する処理が複数行の場合 配列. map do |変数| 実行する処理 end 使用例 irb(main):001:0> numbers = [10, 20, 30, 40] => [10, 20, 30, 40] irb(main):002:0> new_numbers= numbers.map { |n| n * 2 } => [20, 40, 60, 80] irb(main):003:0> new_numbers => [20, 40, 60, 80] map!メソッド mapメソッドとは別でmap!メソッドというメソッドがあります。 mapメソッドとの違いはmapメソッドは元となった配列を変更しないのに対して、 map!メソッドは元の配列を書き換えます。破壊的メソッドと呼ばれるタイプです。 書き方はmapメソッドと同じで mapメソッドの基本的な書き方 配列.map { |変数| 実行する処理 } # 実行する処理が複数行の場合 配列. map do |変数| 実行する処理 end になります。 eachメソッドとmapメソッド、map!メソッドの実行結果 numbers = [1,2,3,4,5] puts "each" numbers_each = numbers.each {|n| n*2} # 返り値は元の配列なので、[1,2,3,4,5]が出力される p numbers_each puts "map" numbers_map = numbers.map {|n| n*2} # 返り値はブロック処理の結果を集めた配列なので、 # 2倍になった配列が出力される p numbers_map puts "map!" numbers.map! {|n| n*2} # 破壊的メソッドは元の配列を書き換える p numbers each [1, 2, 3, 4, 5] map [2, 4, 6, 8, 10] map! [2, 4, 6, 8, 10] 注目していただきたいのはmapメソッドはnumbers_map = numbers.map {|n| n*2}として 処理をされたものを代入して出力されているのに対して map!メソッドは代入せずにnumbers.map! {|n| n*2}でnumberの値が変わっているところです。 mapメソッドの省略形 mapメソッドは3つの条件が合えばブロックを渡す代わりに&:メソッド名を使って 省略して書くことができます。 ブロックの引数が1つであること ブロックの呼び出すメソッドに引数がないこと ブロック引数に対して、メソッドを呼び出す以外の処理がないこと # 通常の書き方 ["RUBY", "RAILS", "VUE.JS"].map { |s| s.downcase } => ['ruby', 'rails', 'vue.js'] # 省略した書き方 ["RUBY", "PHP", "JAVA"].map(&:downcase) => ["ruby", "rails", "vue.js"] mapメソッドの応用的な使い方 データベースから特定の値だけを配列にする mapメソッドはテーブルから特定のカラムを取り出したいときに便利です。 例えばUserテーブルからemailだけを取り出して新たに配列を作ることができます。 users = Users.all users.map { |user| user.name } => ["Maria", "Jun", "Norah", "Lucas", "Sophia", "Chin", "Tom", "Taro"] 注意 紹介しておいて何なんですが、mapメソッドはテーブル全体から取り出したものを配列に返すので このようにデータベースから特定の値だけを配列にする場合はpluckメソッドを使いましょう。 pluckメソッドはデータベースから取り出す段階で特定のカラムを取り出すため パフォーマンスが上がります。 逆にpluckメソッドを使わずmapメソッドを使った方がいいとき インスタンス化したオブジェクトからデータを取得する場合は、mapメソッドを使いましょう。 理由としては、pluckメソッドはインスタンス化したオプジェクトに対しても毎回SQLを実行してしまいパフォーマンスの低下に繋がるからです。 参考サイト Pikawaka TechAcademyマガジン Rubyのmap/map!メソッドの書き方を現役エンジニアが解説【初心者向け】
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Refinery CMSを日本語化する際の注意点

デフォルトの言語は当然英語であり、設定を:enから:jaへと書き換えるのですが、1点引っかかったので注意。 以下はミスの例です。 config/initializers/refinery/i18n.rb - # config.default_locale = :en + config.default_locale = :ja - # config.current_locale = :en + config.current_locale = :ja - # config.default_frontend_locale = :en + config.default_frontend_locale = :ja - # config.frontend_locales = [:en] + config.frontend_locales = [:ja] この状態で実行すると以下のようなエラーが出てしまいます。 ActiveRecord::RecordNotFound in Refinery::Admin::PagesController#edit このエラーの原因は最後の行にあります。 frontend_localesは:jaの1つなので、複数形ではおかしいのです。 よって以下のように単数形へと修正します。 config/initializers/refinery/i18n.rb - # config.frontend_locales = [:en] + config.frontend_locales = [:ja] 4つある項目のうちfrontend_localesだけデフォルトが複数形になっているので、気づきにくい落とし穴でした。 Refinery CMS公式
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

※訂正済み Refinery CMSを日本語化する際の注意点

※ 2021/5/7 21:42追記 誤解だったので訂正いたします。 以下のようにスラッグのカスタマイズ(URLを自由な文字列に指定できる機能)を有効にしている場合、注意が必要です。 config/initializers/refinery/pages.rb config.use_custom_slugs = true seeds.rbの文頭において以下のように日本語化の設定をしなければ、トップページの初期データが日本語化せず、編集できなくなる問題があるようです。 seeds.rb I18n.locale = ::Refinery::I18n.default_locale こちらの問題を誤解しておりました。訂正いたします。 参考ページ 以下、訂正前の記事 ※複数形のままでも問題なく動きます。 デフォルトの言語は当然英語であり、設定を:enから:jaへと書き換えるのですが、1点引っかかったので注意。 以下はミスの例です。 config/initializers/refinery/i18n.rb - # config.default_locale = :en + config.default_locale = :ja - # config.current_locale = :en + config.current_locale = :ja - # config.default_frontend_locale = :en + config.default_frontend_locale = :ja - # config.frontend_locales = [:en] + config.frontend_locales = [:ja] この状態で実行すると以下のようなエラーが出てしまいます。 ActiveRecord::RecordNotFound in Refinery::Admin::PagesController#edit このエラーの原因は最後の行にあります。 frontend_localesは:jaの1つなので、複数形ではおかしいのです。 よって以下のように単数形へと修正します。 config/initializers/refinery/i18n.rb - # config.frontend_locales = [:en] + config.frontend_locales = [:ja] 4つある項目のうちfrontend_localesだけデフォルトが複数形になっているので、気づきにくい落とし穴でした。 Refinery CMS公式
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rubyのメソッドについて

メソッドとは複数の処理を1つにまとめて扱いやすくしたものをいいます。 メソッドの構文は def メソッド名(引数1,引数2・・・) 実行したい処理 end と記述します。 例文としてHello Worldと出力したいメソッドを記述する時は def hello_world puts 'Hello World' end hello_world 引数を書かなくても実行することができます。 5行目でメソッドを呼び出し、putsで出力しています。 メソッド名の命名規則として先頭は必ずアルファベットで書きます。 先頭を数字にするとエラーが起こります。 引数を設定するパターン def add(a,b) a + b end puts add(1,2) これはadd(1,2)の引数を1行目の(a,b)に渡し、2行目のa + bが実行されて戻り値が返され 結果3が出力されます。 ちなみにJavaScriptなんかでは戻り値をreturnで指定したりしますがrubyでは書く必要はありません。 応用編として 動物の種類によって鳴き声を返すcryメソッドを作成。 動物に種類がdogであれば戻り値'ワンワン'を返し それ以外なら戻り値'???'を返します。 def cry(animal) if animal == 'dog' 'ワンワン' else '???' end end puts cry('dog') この場合は引数dogをanimalに渡し、2行目の条件式が成り立つので結果'ワンワン'と出力されます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Dateクラスで曜日を表示させる

はじめに アウトプット用に記述します。 Dateクラスについて DateクラスとはRubyの標準ライブラリの機能です。 require "date" 下記で今日の日付を表示する事ができます require "date" puts Date.today #今日が2021年5月7日のため =>2021-05-07 曜日を表す時は... puts Date.today.wday => 5 #数字? 数字が出てきますので、配列で曜日の配列もセットで作ります。 day = Date.today.wday week =["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"] #dayを添字にする puts "#{week[day]}" #今日が金曜日のため => 金曜日
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【rails6】formの送信をしてもページが遷移しない問題の解決

こんにちは! 今日もアプリケーションの不具合を調べていたところ、思わぬミスを発見しましたので共有します 発生した問題 アプリのform、送信ボタン(submit)を押しても画面が遷移しない 実際に現象をご確認くださいませ 見えていませんが、 「チャットを始める」のボタンを連打しています このコードを確認くださいませ show.html.erb <%= form_with model: @room do |f| %> <%= fields_for @entry do |e| %> <%= e.hidden_field :user_id, value: @user.id %> <% end %> <%= f.submit "チャットを始める", class:"mini-send-btn user-show-chat" %> <% end %> 問題はこの箇所です <%= form_with model: @room do |f| %> 実は、form_withにはturbolinksが関わっているそうです 私は諸々の事情でturbolinksを解除しておりますので、これでは画面遷移ができないのも納得ですね。 解決方法 解決法は下記2つあります ①turbolinksをオンにする app/javascript/packs/application.js require("turbolinks") // 初期設定ではONになってますが、ご確認ください ②このフォームでAjax通信を使用しない(local: trueを追記します) show.html.erb <%= form_with model: @room, local: true do |f| %> # local: trueを追記します では、これでやってみましょう! 私は②の方法でやっていきますね まずは先ほどのコードを直します show.html.erb <%= form_with model: @room, local: true do |f| %> <%= fields_for @entry do |e| %> <%= e.hidden_field :user_id, value: @user.id %> <% end %> <%= f.submit "チャットを始める", class:"mini-send-btn user-show-chat" %> <% end %> これで解決ですね! 今まで何気なく書いたり書かなかったりしていた記述ですが、とても大事なことだと認識しました。 ※このGIFにあるもう一つのミスは見逃してください、これから直します
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Rails Gem JSONをシリアライズする active_model_serializersを学ぶ

はじめに RailsでAPIモードでアプリケーションを作ったことすらないですが active_model_serializersというGemについて学んだことをまとめておきます。 シリアライズとは シリアライズとは、複数の並列データを直列化して送信することである。 具体的には、メモリ上に存在する情報を、ファイルとして保存したり、ネットワークで送受信したりできるように変換することである。他方、既にファイルとして存在しているデータや、一旦シリアライズされたデータがネットワークから送られてきた際に、プログラムで扱えるようにする作業をデシリアライズと呼ぶ。 とのことですが、データをJSONで返すのもシリアライズされた結果のようです。 今回は置いておきます。。    active_model_serializersとはどんなGem? active_model_serializersとはJSONを簡単にいい感じに整形してくれるGemらしいです。 他にも同じようなGemやjbuilder(APIの記事によく出てきました)のような機能はありますが レスポンスが早い SerializerクラスにJSONを整形する処理をまとめられる 直感的にわかりやすい書き方ができる というメリットがあるようです。 active_model_serializersの導入 Gemfileに記述してbundle installして導入します。 Gemfile gem ' active_model_serializers' % bundle install モデル生成 % rails g serializer モデル名 このコマンドを実行することで、appディレクトリ下にserializersディレクトリが自動的に作成され、 指定したモデル名のファイルも作成されます。 例えば console % rails g serializer user とするとuser_serializer.rbが作成されます。 自動生成されたserializerファイルにいろいろな記述をすることで自由にJSONを整形することができます。 JSONに含める値を追加、削除する app/serializers/user_serializer class UserSerializer < ActiveModel::Serializer attributes :id end 初期状態ではこのような形になっていますが ここに表示したいモデルのカラム名を入れることでJSONに含めることができます。 app/serializers/user_serializer class UserSerializer < ActiveModel::Serializer attributes :id, :name, :email end nameとemailを追加しています。 controllerにシリアライザーを指定します ruby:users_controller.rb class UsersController < ApplicationController def index users = User.all #このように指定します render json: users, each_serializer: UserSerializer end end json { "id": 1, "name": "Tom", "email": Tom@example.com } まだまだ理解が足りないので 随時追加していきます。 参考サイト Rails 6で認証認可入り掲示板APIを構築する #9 serializer導入 gem Active Model Serializers のドキュメントを翻訳しました Rails – ActiveModelSerializers gemでサクサクAPI開発 Railsのactive_model_serializerについて学ぶ_100DaysOfCodeチャレンジ10日目(Day_10:#100DaysOfCode)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails] gem 'mailcatcher' をインストールした際に起きたエラーの対処

■ 本記事の概要 開発環境下でメールが正しく送信できているかを確認するために、gem 'mailcatcher'を利用した際に遭遇したエラーの紹介と解決方法になります。 ■ 開発環境 OS:macOS Big Sur 11.3.1 Ruby:3.0.0 Ruby on Rails:6.1.3 ローカル環境DB:Mysql テキストエディタ:Visual Studio Code ■ 起きたエラー mailcatcherはbundleでインストールすると上手く動かないことがあるそうなので、ターミナルからgem install mailcatcherを入力してインストールしました。 ターミナル $ gem install mailcatcher すると、以下のようなエラー文が出力されてきました。 ターミナル Building native extensions. This could take a while... ERROR: Error installing mailcatcher: ERROR: Failed to build gem native extension. 〜〜〜 省略 〜〜〜 parser.rl:144:14: error: implicit declaration of function 'thin_http_parser_is_finished' is invalid in C99 [-Werror,-Wimplicit-function-declaration] } else if (thin_http_parser_is_finished(parser) ) { ^ 1 warning and 2 errors generated. make: *** [parser.o] Error 1 make failed, exit code 2 〜〜〜 省略 〜〜〜 ■ 解決 ERROR: Failed to build gem native native extension.の方で検索をかけて調べてみると、Xcode関連の問題かとも思ったのですが、感覚的に違うところが原因ではないかと思い、Error installing mailcatcherの方で再度調べてみました。 すると、mailcatcherの公式Githubに寄せられたissuesが引っかかったので、中を覗いてみると今回と同様のエラーが起きているようでした。 参考先:Installation Fails on Catalina #430 ( https://github.com/sj26/mailcatcher/issues/430 ) そこに寄せられたコメントによると、gem install mailcatcherを入力する前に、gem install thin -v '1.5.1' -- --with-cflags="-Wno-error=implicit-function-declaration"を行えばインストールできるようになると書かれていました。 実際に以下の順で入力したところ、無事にインストールできました。 ターミナル $ gem install thin -v '1.5.1' -- --with-cflags="-Wno-error=implicit-function-declaration" $ gem install mailcatcher . (インストールの確認が取れた後、件のGitHubのREADME.mdを読んでみたら、thinでエラーが発生したら先にgem install thin -v '1.5.1' -- --with-cflags="-Wno-error=implicit-function-declaration"を試してみるようにとの記載がありました) ■ 設定 gem 'mailcatcher'は無事にインストールできたので、公式GitHub( https://github.com/sj26/mailcatcher ) に習って、environments/development.rb に以下の記述を加えます。 environments/development.rb config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { :address => '127.0.0.1', :port => 1025 } config.action_mailer.raise_delivery_errors = false ■ 起動 Rails側の設定も完了したので、mailcatcherを起動した後、rails sでアプリケーションを立ち上げます。 ターミナル $ mailcatcher <%# 入力すると以下がターミナルに表示されます %> Starting MailCatcher ==> smtp://127.0.0.1:1025 ==> http://127.0.0.1:1080/ *** MailCatcher runs as a daemon by default. Go to the web interface to quit. ターミナル $ rails s ■ 確認&終了 ブラウザを操作していってメール送信がされた後、http://127.0.0.1:1080/にアクセスして、ちゃんと送信されているかを確認します。 (以下http://127.0.0.1:1080/にアクセスした際の画面と終了ボタン) 送信されたメールの中身(HTML, Text)を確認できたので、mailcatcherを終了させます。終了のさせ方は、上記の画面上に表示されているQuitをクリックすると、mailcatcherは終了します。 (再度メールの確認をする際は、ターミナルからmailcatcherを起動させる必要があります。 最後に 以上が今回私が行った対処になります。 同じようなエラーが発生した方の参考になれば嬉しいです! 最後に ここまで読んでいただき、ありがとうございました!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Rails/devise] アカウント情報の編集・変更機能の実装

概要 deviseでユーザー管理機能を実装した際、 「ユーザーがパスワードやアイコンの画像を編集・変更が行える機能は必須では・・・」 と考えられたため実装しました。deviseで作成したupdateの設定やapplication_controller.rbに追記を行えば簡単に実装できましたのでここに記述します。 環境 macOS Big Sur バージョン 11.2.3 Ruby 2.6.5 Rails 6.0.3.6 Mysql Ver 14.14 Distrib 5.6.51 前提 deviseをインストールし、モデルを作成している。 ※この記事ではコントローラーの作成から始めます。 流れ 1.deviseのコントローラーを作成 2.edit.html.erbにformを記述 3.routes.rbにupdateのルーティングを記述 4.application_controller.rbにてupdateによるパラメーターの変更を許可する 5.registrations_controller.rbに上書き後の遷移先を記述 1.deviseのコントローラーを作成 deviseのコントローラーを作成します。 ターミナル. rails g devise:controllers users ↑ユーザー情報に関わるモデル名 これでregistrations_controller.rbを含むdeviseのコントローラーが作成されます。 2.edit.html.erbにformを記述 edit.html.erb <%= form_with model: @user, url:user_registration_path, class: 'registration-main', local: true do |f| %>                          ↑ 「rails routes」で表示されるusers/registrations#updateのPrefixを記述。 3.routes.rbにupdateのルーティングを記述 edit.html.erbで設定したボタンを押すとregistrations_controller.rbを経由してデータが上書きされるようにします。 application_controller.rb. Rails.application.routes.draw do devise_for :users, controllers: { sessions: "users/sessions", registrations: "users/registrations" # registrations_controller.rbに導くためのルーティングを記述 } # 中略 root to: 'photos#index' end registrations_controller.rbを経由するためのルーティングを設定しました。 4.application_controller.rbにてupdateによるパラメーターの変更を許可する sign_upの際に「初期設定のないカラムを保存するための許可」を記述されたと思われます。 updateの際も同様に「上書きする許可」を記述します。 今回は「nickname,imgae,password」の編集・変更機能を実装することが目的だったので以下のようにしました。 application_controller.rb class ApplicationController < ActionController::Base # 中略 private def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :nickname, :self_introduction, :image, :twitter, :facebook, :instagram]) devise_parameter_sanitizer.permit(:account_update, keys: [:nickname, :image]) #account_updateにつづいて編集・変更したいカラム名を入れる。 end # 中略 end これで編集・変更機能の内容は終わりました。最後に「上書きを行った後、どこに遷移するのか」を記述します。 5.registrations_controller.rbに上書き後の遷移先を記述 今回は上書き後に確認が行えるようcurrent_user(ログインしているユーザー)のマイページに遷移するようにします。 registrations_controller.rb class Users::RegistrationsController < Devise::RegistrationsController #中略 protected def after_update_path_for(resource) user_path(current_user) end #中略 これでregistrations#updateアクション後に、after_update_path_forのパスにリダイレクトします。以上 参考
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【2021年現在】初心者でもご安心。chartkickのインストールの仕方(rails 6)

アプリケーションにグラフを差し込むのに便利なchartkickの説明(導入メイン)となります。 1.Chartkickの導入 gemfileに gem 'chartkick' を記述。その後忘れずにbundle installも! 続いて % yarn add chartkick chart.js ※こちらのコマンド忘れずに そしてapp/javascript/packs/application.js内に import "chartkick/chart.js" を記述する! ※もしグラフが上手く表示されない場合は app/javascript/packs/application.js内の記述を import "chartkick/chart.js"ではなく require("chartkick") require("chart.js") としてみてください。 rails5以前 の方は //= require chartkick //= require Chart.bundle こちらを。 2.グラフ表示 いよいよグラフ表示です! グラフを表示させたい「○○.html.erb」に <%= pie_chart [['赤', 50], ['青', 50]]%> と記述。 この段階で画面上に円グラフが表示されているか確認することで、chartkickがちゃんと導入できているか確認することができます。 ※もし上手く表示されない場合、『サーバー閉じてからのrails s』  もしくは『js内の記述を変更』してみてください 3.グラフについて pie_chartの部分を変更すればグラフの種類も変更可能です column_chart(縦棒グラフ) bar_chart(横棒グラフ) line_chart(折れ線グラフ) 今回は速攻でグラフが表示されるかを確認するためコントローラーを経由せず、ビュー内に直接データ記述(赤50青50)しました。 一般的な使い方としては コントローラ内にデータ記述する方法など色々ありますので下のリンクをご参考に。 参考サイト chartkick 【Rails】Rails完結!グラフを簡単に作成できるライブラリChartkickについて簡単にまとめてみた
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Ruby】投稿一覧の表示の順番を変更する

概要 投稿アプリを作成している時、投稿が表示される順番を変えたい時ってありますよね。 その際、「新しい順の投稿一覧」を表示する場合と「古い順の投稿一覧」を表示する場合の方法を記載しておきます! 環境 ruby 2.6.5 Rails 6.0.3.5 「新しい順の投稿一覧」 controllers>comments.controller.rb class CommentsController < ApplicationController def index @comments = Comment.all end @comments = Comment.allと記載がある後ろにorder(created_at: :desc)を書きます。 (allは記述しなくて平気です) controllers>comments.controller.rb class CommentsController < ApplicationController def index @comments = Comment.order(created_at: :desc) #created_atは作成日時 descは降順 end これで完了です。新しい投稿が上から表示されます! 「古い順の投稿一覧」 controllers>comments.controller.rb class CommentsController < ApplicationController def index @comments = Comment.order(created_at: :asc) #created_atは作成日時 ascは昇順 end これで完了です。古い投稿から表示されます! まとめ #新しい順の投稿一覧 order(created_at: :desc) #created_atは作成日時 descは降順 #古い順の投稿一覧 order(created_at: :asc) #created_atは作成日時 ascは昇順
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Railsで使うdbコマンドまとめ

db:create # 使用中の環境でDBを作成する db:create # 全ての環境でDBを作成する db:create:all db:drop # 使用中の環境でDBを削除する db:drop # 全ての環境でDBを削除する db:drop:all db:migrate # 使用中の環境で未実行のマイグレーションを実行する db:migrate # 特定の一つのマイグレーションを実行する db:migrate:up # 特定の一つのマイグレーションの実行を取り消す db:migrate:down # 現在のマイグレーションの状態を表示する db:migrate:status # db:drop → db:create → db:migrate db:migrate:reset db:rollback # 最新のマイグレーションの実行を取り消す db:rollback db:seed # db/seed.rbに従ってレコードを作成する db:seed db:schema # 使用中の環境のDBでスキーマを読み込む db:schema:load # 使用中の環境のDBでスキーマを削除する db:schema:dump db:setup # db:schema:load → db:seed db:setup db:reset # db:drop → db:setup db:reset 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む