Rails関連のことを調べてみた2021年08月28日

Rails関連のことを調べてみた2021年08月28日
目次

複数のJSON形式のデータを返す方法

[1.はじめに](#1-はじめに)
[2.実際のコード](#2-実際のコード)
[3.respond_toとは何なのか](#3-respond_toとは何なのか)
#1. はじめに
RailsをAPIモードで作成していたところ、複数のJSONデータを返したくなったので備忘録として残します。
今回はShowアクションで想定します。
#2. 実際のコード
**通常**
remder json を使用してView側にJSON形式で値を返します
paramsにはView側から送られてきたパラメータが入ります。

“`rb
def show
post = Post.find(params[:id])
render json: post
end

“`

**JSONデータを複数返したい場合**
例えば、post has_manyやbelongs_toを使用して紐づいているデータも一緒に送りたい場合(これは私の場合ですが)
今回はpostとpost_itemsが紐づいています。

“`rb
def show
post = Post.find(params[:id])

元記事を表示

【Rails】「nilじゃない」と「present?」は同じ? 〜わかりにくいコードに立ち向かう〜

こんにちは
業務でリファクタをしていて、タイトルの件少し気になったのでまとめてみます

少しややこしいですが、頭の体操だと思ってお読みください
(混乱しないように、わかりやすくまとめたつもりではあります。一応。。)

否定表現ってどうしてわかりにくいんでしょうね。ただ意味が逆になるだけなのに…

# 本題
タイトルの通り`nilじゃない`という条件は`present?`と代替可能か?というテーマです

“`ruby
if !hoge.nil? # => hoge.present?でもいいのでは?
# …
end
“`

上記の例だと、「`nil`の場合に早期リターンすればいいだけじゃん」で片付くかもしれません(それか`unless`)

ですが、条件が複雑になってくると`present?`にしたい欲が込み上げてきて吐きそうになります?
(以下は吐きたくなる例)

“`ruby
if !hoge.nil? && fuga.present? # .。oO hoge.present?にしちゃだめ・・?
# …
elsif fuga.status == ‘cancel

元記事を表示

rails consoleで例外発生時のエラーメッセージが文字化けする場合の対処方法

## 発生する問題
rails consoleで例外が発生し、そのエラーメッセージに日本語が含まれていた場合、”\xE3\x83\x90\xE3…”みたいな形で日本語が文字化けする。

たとえば以下は本来であれば「バリデーションに失敗しました: Eメールを入力してください」というエラーメッセージを表示すべき場合に文字化けする例である。

“`
> User.create!
/(railsのパス)/validations.rb:80:in `raise_validation_error’: \xE3\x83\x90\xE3…(省略) (ActiveRecord::RecordInvalid)
“`

## 原因

rails consoleで使われているirbのバージョンが1.3.5以下だとこの問題が発生する。

rails consoleで使用されているirbのバージョンを確認する場合は、rails console上で`irb_info`と入力する。

“`
> irb_info
=>
Ruby version: 3.0.0
IRB version: irb 1.3.0

元記事を表示

railsで.envの値を読み込めなかったときにやること

## 結論
`spring stop`を実行して、もう一度`rails c`でコンソールを立ち上げるとOK

“`
$ spring stop
$ rails c
“`

## 問題が起きた時の状態

`.env`ファイル

“`.env
AUTH0_DOMAIN=https://XXXXXXXXXXXXX/
AUTH0_IDENTIFIER=https://XXXXXXXXXXXXXXX
“`

“`console
$ rails c
Running via Spring preloader in process 19140
Loading development environment (Rails 6.0.4)
irb(main):001:0> ENV[‘AUTH0_DOMAIN’]
=> nil
“`

## spring stopを実行

“`
$ spring stop
“`

“`console
$ rails c
Running via Spring preloader in process 19270
Loading development env

元記事を表示

rails tutorial2章進めた時の覚書

2章でhello_appに加え、toy_appを製作したが、
“`
$ git push heroku master
“`

は同じように叩いてしまっていいのか?
上書きされる感じになるのかな?

herokuの管理画面見る限り、
– hello_app
– toy_app

の2つがアップロードされているわけではない?から、上書きされてるのかしら。

“` herokuアプリをブラウザで開く
$heroku open –app アプリ名
“`
参考: https://qiita.com/RyomaMaeda/items/60c96e8255996cbb375c

“` アプリ名確認
$ heroku apps
“`

アプリブラウザで確認したらエラー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198412/6dcbc71b-1168-72c3-31af-6a439af240fb.png)

rails tutorialに則りログ確認からの migrate
“`

元記事を表示

【Rails】carrierwave画像投稿機能 (メモ)

# 目標
* 画像投稿機能

# 開発環境
* Rails: 6.1.3
* ruby: 3.0.0
* mac: os

# 前提
* 投稿機能実装済み
* 投稿テーブルpost

# 実装

### 1.Gemfileにcarrierwaveを記述 してインストール

“`ruby:Gemfile
gem ‘carrierwave’
“`

`bundle install`します。

“`ruby:ターミナル
$bundle install
“`

###2.postテーブルにimageカラム追加

“`ruby:ターミナル
$rails g migration AddImageToPosts image:string
“`

マイグレーションファイルが生成されます。
`image`カラムが追加されているのを確認してマイグレーションします。

“`ruby
class AddImageToPosts < ActiveRecord::Migration[6.1] def change add_column :posts, :image, :string

元記事を表示

yarnって何?

# パッケージマネージャーの1つ。

# パッケージマネージャー?

ソフトウェア同士の依存関係を管理するもの。

# 依存関係?

AとBっていうgemがあるとして、

Aをアップグレードしたら、Bは今のバージョンだと対応してないから、Bが使えなくなった。

BはAのバージョンに依存している状態。

いっぱいあるソフトウェアの依存関係を手動で管理するのはめんどくさいから、yarnっていうパッッケージマネージャーが管理してくれている。

パッケージ化してマネジメントしてくれてる。

ありがとうyarn。

railsでgemインストールした時にこのgemはバージョン何以上しか対応してません。みたいな警告出るのもyarnのおかげなのかな?

元記事を表示

railsチュートリアル第4章 文字列とメソッド

##文字列とメソッド
Ruby を学ぶためのツールとして、主にRailsコンソールを使っていく
Railsアプリケーションを対話的に操作するためのコマンドラインツール
クラウドIDEとは何か? 多分cloud9だと思う。

environmentsより上に行ったあと

“`
$ nano ~/.irbrc
“`

Ctrl-Xと押してnanoエディタから離脱します。ファイルを保存するかどうか訊かれるので、yキーを押して~/.irbrcファイルを保存

“`
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:AUTO_INDENT_MODE] = false
“`
どうすればいいかわからなかったのでsample_appまで降りて“`rails console“`を起動
デフォルトでは、コンソールはdevelopment(開発)環境という
Ctrl-Cを押してコンソールから強制的に抜け出すこと
Ctrl-Dを押して正常にコンソールを終了させることもできます
Ctrl-Pまたは上矢印キーで以前に実行したコマンドを再利用

###文字列
文字列(

元記事を表示

[Rails]フォロー機能導入中にActiveModel::UnknownAttributeErrorというエラー発生

# はじめに
本記事では、フォロー機能時に発生した
`ActiveModel::UnknownAttributeError`というエラーの解決した方法を記述します。
仲間に助けてもらいながら実装できたため、個人でもアウトプットして身につけたいと思い、記事にしました。

# エラー画面

![フォロー機能導入できない.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1768158/6d9269d3-3e99-1950-006f-c044d6252c9e.png)

`attribute`=`属性`という意味。(Google先生)

Relationshipに`user_id`という属性は知らん。と怒られました。

![フォロー機能のsequel pro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1768158/5fa8dc25-1c57-ada7-a05a-fcbd235568db.png)

確かに、`user_id

元記事を表示

vue-js-modalを用いて投稿一覧ページにおいてRails × Vue.jsで動的なコンポーネントをモーダルウィンドウとして表示

投稿一覧ページから投稿詳細ページをモーダルウィンドウとして表示

![モーダルウィンドウ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653881/ca85156e-903e-889c-7a1f-f46c8d87e01e.gif)

こんな感じの表示をする。

Vue.jsで簡単にモーダルが実装できる「vue-js-modal」


この記事を最初は参考にしてますが、動的な子コンポーネントを投稿一覧からモーダルウィンドウを表示させる技術は僕のオリジナルなので、動くは動きますが、なにか間違えてる可能性あります。
drinkをpostに置き換えて読めば読みやすいです。

投稿一覧ページRails と Vue.jsでSPAな感じにするやりかたはこちらの教材が結構参考になります。
てか今度僕が記事にできればなと思います。
https://www.techpit.jp/courses/123/curriculums/126/sections/935/parts/3581

# 下準備

“`
npm install

元記事を表示

Rails pluckメソッドとは?

###結論
####pluckメソッドとは引数に指定したからむの値を配列で返してくれるメソッド

###使い方
####1 モデル名.pluck(:カラム名) 
####2 重複を取り除く
pluckメソッドは、重複を取り除くdistinctメソッドと併用する事が出来る。
Owner.distinct.pluck(:カラム名) ←こんな感じ
####3 条件を指定する
pluckメソッドは、条件を抽出してくれるwhereメソッドと併用する事が出来る。
Owner.where(‘条件’).pluck(:id) ←こんな感じ

自分のポートフォリオ作成時に上記を使ったのでQiitaに投稿
Hobby.where(user_id: User.where(“nickname LIKE ?”, “%#{value}%”).pluck(:id))
→検索時の部分一致

###pluckメソッドの返り値
pluckメソッドの返り値は、配列です。
その為、pluckメソッドの後にメソッドチェーンを使って他のクエリメソッドを繋げることが出来ないので注意。

など、まだ他にも使い方はあります!
また似たよ

元記事を表示

【Rails】ActiveRecord::RecordNotFound (Couldn’t find Order without an ID)の対処法

症状

RailsAPIでメソッドを作成していたところ、以下のエラーメッセージが表示されてしまいました。
翻訳すると、「IDのないHogeが見つかりませんでした」

“`ruby:error
Completed 404 Not Found in 1ms (ActiveRecord: 0.0ms | Allocations: 158)

ActiveRecord::RecordNotFound (Couldn’t find Hoge without an ID)
“`

メソッドにパラメータは以下です。

“`ruby:parameter
Parameters: {“params”=>{“id”=>12}, “hoge_id”=>”12”, “hoge”=>{}}
“`

該当のメソッドは以下です。

“`ruby:hoge.rb
class OrdersController < ApplicationController def update hoge= Hoge.find(params[:id]) render json: {

元記事を表示

【Rails】ransackによる簡易的な検索機能実装

#概要
ransackのシンプルモード(Simple Mode)を利用した簡易的な検索機能を実装しました。備忘録として記録します。
#環境
– Ruby(バージョン2.6.5)
– Rails(バージョン6.0.0)
– mysql2(バージョン0.5.3)

#実現したいこと
登録してある顧客のリストに対して、氏名(last_name, first_name)と会員ID(member_id)による検索を可能にする。
#過程
###1. ransackの導入
“`ruby:Gemfile
gem ‘ransack’
“`

“`terminal:-zsh
% bundle install
“`
###2. コントローラー
“`ruby:customers_controller.rb
def index
@customers = Customer.order(“created_at DESC”)

@search = Customer.ransack(params[:q])
@customers = @search.result
end
“`

元記事を表示

RoR faraday/options.rb:166: warning 対策の例

こういうエラー

“`
vendor/bundle/ruby/2.7.0/gems/faraday-0.15.4/lib/faraday/options.rb:166:
warning: Capturing the given block using Proc.new is deprecated; use `&block` instead

“`

環境変数で対応できる

“`
export RUBYOPT=-W0
“`

元記事を表示

Bootstrap5をrails5に導入する。

Bootstrap5を導入する記事がrails6のものばかりだったので一応。
当方はrailsチュートリアルを無料で読むためにrails5.2を利用しています。

# Bootstrapと依存popper.js
“`ruby:Gemfile
gem ‘bootstrap’, ‘~> 5.1.0’
gem ‘popper_js’, ‘~> 2.9.3’
“`

“`scss:assets/stylesheets/application.scss
@import “bootstrap”;
“`

“`js:assets/javascript/application.js
//= require popper
//= require bootstrap-sprockets
“`

これだけ。`application.js`のpopper.jsは上に書かないといけないらしいですが試していません。

JQuery依存はなくなりましたがハンバーガーメニューなど、Javascriptが不要になったわけではなかったです。
初心者過ぎてそのへんよくわかっていませんでした。

bundle

元記事を表示

親モデルのActiveModel::Serializer内で子モデルのActiveModel::Serializerを指定する

# 実行環境

– macOS 10.15.7 (19H1217)
– Ruby 2.6.7
– Rails 6.0.3.7
– active_model_serializers 0.10.12

# 前提

– `Author`モデルと`Book`モデルは`has_many`・`belongs_to`の関係にある。
– 以下の設定が有効になっている。

“`ruby:config/initializers/active_model_serializers.rb
ActiveModelSerializers.config.default_includes = ‘**’
“`

# やりたい事

– `Author`モデルのインスタンスをJSONとして取得する際には,`AuthorSerializer`を使用する。
– `Book`モデルのインスタンスをJSONとして取得する際には,`BookSerializer`を使用する。
– `Author`モデルのインスタンスをJSONとして取得する際には,そのインスタンスが持つ`Book`モデルのインスタンスも取得する。

# やり方

元記事を表示

#3 RailsとVue.jsでモーダルウィンドウを実装

https://qiita.com/divclass123/items/61f592eb3663828eb931
前回の続き。
前回はかなり苦戦したが、なんとか実装できた。

しかし、子コンポーネントをモーダルウィンドウで表示して、そこでいいねを押してもリアルタイムで親コンポーネントにいいねが表示されないといった問題があった。
ちなみにリロードするとしっかりとどちらにも反映される。

(親)app.vueのなかに(app.vueから見たら子)show.vueもあって、(子)likeButton.vueもある。
(親,app.vueから見たら子)show.vueのなかに(子)likeButton.vueもある。
まぁ、なんかすこしややこしい。。。

app.vueのlikebutton.vueはしっかり機能してるし、
show.vueのなかのlikeButton.vueも機能してる。
問題はapp.vueからshow.vueをモーダルウィンドウで表示したときに、いいねがリアルタイムで反映されない。

[追記]色々あがいたが、きつかった。。。いつかリベンジ

“`app.vue
<

元記事を表示

[Ruby on rails]ゲストログイン機能 ゲストログインは削除、編集されないようにする

ゲストログインは作っておいた方が良い!

ゲストログイン押したら、ログインできちゃう便利機能です。
就職、転職活動でポートフォリオを外部の方に見せる場合には、作っておいた方が良いらしいです。
ゲストユーザーを作成せず、これでログインしてくださいとemail,passwordを提示したところで、
少し面倒なので見てもらえない可能性があります。
すぐ実装できるので、ゲストログインは作っておくべきだと思います!!!!
(他の人のポートフォリオ触ってみてもそうですが、
ゲストログインがないと、やっぱりすごく面倒に感じます。)

![スクリーンショット 2021-08-27 11.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/26e66d94-852a-f6dc-d836-a5209c29016b.png)

とても参考にした記事

https://qiita.com/take18k_tech/items/35f9b5883f5be4c6e104

元記事を表示

[axios] ファイルダウンロードができない or 空ファイルになってしまう現象の解消

フロント側はReact、サーバーサイドはRailsでファイルダウンロードが
うまくいかないケースがあり、それを解消した記事内容になります。

症状としては、axiosのissueにあったこのケースに当たります。
[Github | axios/axios | Empty response when responseType is blob or arraybuffer.](https://github.com/axios/axios/issues/1392)

サーバーサイドとフロント部分の結合部分なので、
原因の特的ができていなくて引っかかってる人が多そうですね。

私のケースの場合は、railsでheadの記述が不要だったのですが、
それだけじゃよくわからないと思います。
実装をみながら解消方法をみていきましょう。

## フロント側の記述

フロント側は以下のようなコードにしています。

“`
$ yarn add file-saver
“`

“`tsx
import { saveAs } from ‘file-saver’;
~~

export const fil

元記事を表示

【Ruby on rails】JavaScript 非同期通信のコメント機能でエラーメッセージを出す バリデーション

初めに

非同期通信でのコメント機能は実装ずみで、「401字以上のコメント」はNGというバリデーションは、
かけていたものの、エラーメッセージが出るようにしていませんでした・・・。
少し実装に苦労はしたものの、非同期通信への理解が深まったのでまとめていきます!!

![スクリーンショット 2021-08-27 11.11.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1633266/44f28078-ac76-b295-e17d-d303e000d722.png)

バリデーションをかけておく

“`perl:app/models/post_comment.rb
class PostComment < ApplicationRecord default_scope -> { order(created_at: :desc) }
# あるコメントに紐づくユーザーも記事も1
belongs_to :user
belongs_to :post

v

元記事を表示

OTHERカテゴリの最新記事