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

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

Flexboxで子要素の幅を指定する

#プログラミングの勉強日記
2020年8月4日 Progate Lv.226
Flexboxで`width`が効かなかったので原因を調べて解決した。(メモ)
`flex-shrink`を0にすることで`width`の指定をすることもできるみたいだが、今回は`width`を使うのをやめて`flex-basic`を使った。

#直面した問題
 Flexboxで指定すると、画面幅によって子要素が伸びてしまい、綺麗に見れなくなってしまった。
0804.png
 下の画像のように子要素の幅を指定することで、画面幅によって子要素が伸びないようにしたい。
0804-1.pngrails routes.rbのmemberとcollectionの違い

## routes.rbのmemberとcollectionの違い
railsのroutes.rbでルーティングを設定する時にmemberとcollectionの違いに関して記載します。

## menberの場合
“`routes.rb
resources :buy_additional_actions, only: %i[] do
member do
get ‘index’ => ‘buy_additional_actions#index’
“`

menberの場合は生成されたurlに:idが自動で追加されます。

“`
buy_additional_action GET /buy_additional_actions/:id/index(.:format) buy_additional_actions#index
“`

## collectionの場合
“`routes.rb
resources :buy_additional_actions, only: %i[] do
collection do
get ‘index’ =>

元記事を表示

rails5中級チュートリアル中に発生したSassC::SyntaxError in Pages#index対処法

[rails5中級チュートリアル](https://techracho.bpsinc.jp/hachi8833/2018_02_06/51401)中にエラーが発生 以下エラー画像
415e5c6c8622f2ea3ffb780959431d92.png

####仮説と試したこと
エラー文の解説を翻訳してみると

>>「エラー:インポートするファイルが見つからないか、読み取れません:bootstrap-sprockets。
app / assets / stylesheets / application.scssの15:1行
@import “bootstrap-sprockets”;」

となる。 importの読み込み記述はされているが、sprocketsが存在しないことになっていると仮説。

元記事を表示

ソースコードを読むとき

既存プロジェクトに入った際、各Classがどのようなメソッドをもっているかを確認する必要があると思います。

その際、自分がどのように確認を行っているかを以下で述べていこうと思います。

[環境]
Ruby
Rails
Solidus

今回は、RailsのSolidusというGemを使って、説明させて頂ければと思います。
download.png

$rails c
でコンソールの中に入る。

そこで、上記のように、任意の文字にオブジェクトを代入する。
(Spree::Taxonはオブジェクト)

$a.methods
を実行。実行することで、そのオブジェクトが持っているmethodが表示される。

download (1).png既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】

こんにちは.
今回は, 既存のRailsアプリの開発環境にDockerを導入する手順をまとめてみました.
まだまだ勉強不足ですので, 修正点・改善点等ございましたら, ご指摘いただけますと幸いです.

#事前準備
– [Docker-for-macのインストール](https://hub.docker.com/editions/community/docker-ce-desktop-mac)
– 既存のRailsアプリ(今回は以前作成した簡単な家計簿アプリを使用します.)

#環境
Ruby:2.5.3
Rails:5.2.4.3
MySQL:5.6
Docker:19.03.8
docker-compose:1.25.4

#手順

###1. ルートディレクトリにDockerfile,docker-compose.ymlを追加

![add_file.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630434/b9f3d340-2791-3ed9-4905-cb0b37b0bdc1.png)

元記事を表示

Railsアプリの開発環境をDockerで構築する手順【Rails, MySQL, Docker】

こんにちは.
今回は, Railsアプリの開発環境をDockerで構築する手順をまとめてみました.
まだまだ勉強不足ですので, 修正点・改善点等ございましたら, ご指摘いただけますと幸いです.

#事前準備
– [Docker-for-macのインストール](https://hub.docker.com/editions/community/docker-ce-desktop-mac)

#環境
Ruby: 2.5.8
Rails: 5.2.4.3
MySQL: 5.7.31
Docker: 19.03.8
Docker Compose: 1.25.4

#手順

###1. プロジェクトのルートディレクトリを作成

“`:terminal

$ mkdir test-app
“`

初めに, プロジェクトのルートディレクトリを作成します.

###2. ルートディレクトリ直下にファイルを追加

“`:terminal

$ cd test-app
$ touch Dockerfile docker-compose.yml Gemfile Gemfile.lock
“`

元記事を表示

graphql-rubyを使って認可する方法

GraphQLを使っているときに様々な処理で認可させたい事があると思います。

* このQueryはログインユーザーのみ実行できるようにしたい
* このMutationは管理者のみ実行できるようにしたい
* このQueryは自分の所有しているデータのときだけ返却するようにしたい
* このFieldは自分の所有しているデータのときだけ返却するようにしたい

当初はgraphql-rubyの知識が乏しかったので取得や更新処理の中で認可する処理を呼び出していたのですが、graphql-rubyのドキュメントを改めて読み直したところ、認可のためのメソッド(authorized?)がある事がわかったので動作検証を兼ねて記事を書きました。

# graphql-rubyについて

Ruby(Rails)でGraphQLを簡単に使えるようにしてくれるGemです。
https://github.com/rmosolgo/graphql-ruby

細かいところは実際に試してみないとわからないことも多いですが、ドキュメントが充実していて素晴らしいです。
https://graphql-ruby.org/

元記事を表示

railsでのboorstrapの導入

自分用です!

bootstrapを導入していきます。

“`ruby:Gemfile
gem ‘bootstrap’, ‘~> 4.4.1’
gem ‘font-awesome-sass’, ‘~> 5.12.0’
gem ‘jquery-rails’
“`
Gemfileに記載をし、bundle installを実行。

ちなみに、公式のgemを検索するときは、[rubygems](https://rubygems.org/)がおすすめ。

また gem ‘font-awesome-rails’では、font-awesome5系に対応していないので gem ‘font-awesome-sass’を使用する必要があります。

“`ruby:application.scss
@import ‘bootstrap’;
@import ‘font-awesome-sprockets’;
@import ‘font-awesome’;
“`

を追加。

“`ruby:application.js
//= require jquery3
//= require popper
//=

元記事を表示

scssの入れ子とパーシャル

自分用です!

## sassのimport

railsでは、cssをsassで書いていきます。

・scssにすることで変数や親子関係の定義など、効率化の機能が使用でき、全体のコード量を削減できます。
・sass記法ではインデント制御のためデザイナーに引き渡しづらく、cssの記法から離れてしまうという面からscss記法を採用しています。

application.scssとtop.scssがあるとして、top.scssをapplication.scssにインポートします。

“`ruby:application.scss
@import ‘top’;
“`

このように、@importを使えば必要なcssファイルだけをインポートできます。

## パーシャル

次に、sassと同じようにviewでも入れ子構造が使えます。
それがパーシャルです。

application.html.erbにheaderとfooterのコードがたくさん入っていていると見えずらいですよね。

そこで、shared/_header.html.erbと、shared/_footer.html.erbを

元記事を表示

rails gの際のファイル生成の設定

自分用です!

rails g コマンドを使用した際に、assets、helper、testファイル、ルーティングが生成されないように設定して行きます。

“`ruby:config/application.rb
config.generators do |g|

g.skip_routes true
g.assets false
g.helper false
g.test_framework false
end
“`

これで、無駄なファイルが生成されない。

ちなみに、、、

環境設定をする際は、

config/initializers以下の各ファイル
特定のツールや機能に対する設定ファイルを、ファイル別に記述する。(assets.rb / aws.rbなど)

config/environments以下
環境別に行いたい初期化作業を記述する
(production.rb / staging.rb など)

config/applicaiton.rb
アプリケーション全体に関する設定を行う

順序に寄らないも

元記事を表示

モデル、コントローラーの生成

自分用のメモです!

## コントローラーの生成

ex) (newアクションを持つ)userコントローラーの生成

“`ruby:ターミナル
rails g controller Users new
“`

## モデルの作成

ex) (name,emailカラムをもつ)userモデルの生成

“`ruby:ターミナル
rails g model User name:string email:string
“`

## コントローラーの削除

ex) userコントローラーの削除

“`ruby:ターミナル
rails destroy controller Users
“`

## モデルの削除
 
ex) userモデルの削除

“`ruby:ターミナル
rails destroy model User
“`

元記事を表示

[rails]部分テンプレートの作成方法

#部分テンプレートとは
「部分テンプレート」は、複数のページで共通して利用できるViewファイルのことです。
複数のファイルで重複しているコードを一つのファイルにまとまることで、修正時に一箇所だけの修正で済んだり、コードの記述が少なくなり可読性が高くなります。

手順はざっくりこんな感じです。
1.共通化できる部分を探し出す
2.部分テンプレートファイルを作成
3.部分テンプレートファイルに共通化部分を記述
4.部分テンプレートファイルを呼び出す

##1.共通化できる部分を探し出す
そのままですが、重複している箇所を探す作業です。

##2.部分テンプレートファイルを作成
ファイル名の先頭にアンダースコア( _ )付きのerbファイルが、部分テンプレートファイルとして認識されます。今回は投稿機能を部分テンプレート化で見ていきます。
app/views/books/_newform.html.erb

##3.部分テンプレートファイルに共通化部分を記述
共通部分を切り出し、ファイルに貼り付けます。
基本的に部分テンプレートファイルではローカル変数(@がないやつ)を使います。
部分テンプ

元記事を表示

rails 本番環境に開発環境の変更を反映させる

##この記事について
リポジトリから本番環境にpullをすれば変更が反映されると思ってたけど、どうやら違っていたようなので備忘録メモとして投稿!!!

##なぜpullしても反映されないのか?
自動反映の仕組みはパフォーマンスに影響を与えるのでdevelopment以外ではデフォルトではオフになってるみたい。
**cache_classes**という設定値があって、自動反映の仕組みは毎回リクエストが来るタイミングでソースコードを都度読むことで実現している(逆にproductionなどでは一度読み込んだコードをメモリ上に保持することでリクエストごとに発生していたファイル読み込みのステップが不要になり早くなる)

##変更を反映させるには?
アプリケーションサーバーをkillしてもう一度立ち上げてあげるか、rails restratコマンドで変更を反映してあげるとよい。

元記事を表示

active_hashを使って疑似モデルを作ろう 〜都道府県データ〜

某メルカリコピーサイト作成中
#**active_hash**
>データベースを作ることなく擬似的にモデルを作成しデータを入れることができる

とのことなので active_hash なるgemを使ってみます

まずGemfileにactive_hashを追加

“`ruby

gem ‘active_hash’
“`

bundle install します

#Model
でモデルファイルを作っていくんですが
今回は rails g model では作成しない様

普段はApplicationRecordを継承してるけど、
active_hashを使用するモデルはActiveHash::Baseを継承する必要があるからみたい

なので直接 app/models/ に作成していきます

“`prefecture.rb
class Prefecture < ActiveHash::Base end ``` こんな感じで ActiveHash::Base を継承します

データの雛形はこんな感じ

“`prefecture.rb
class Prefecture < A

元記事を表示

AWS Elastic Beanstalk + Rails環境でnginxのconfがうまく反映されない場合

■方法
公式ドキュメントの通り、[.platform]配下にファイルを配置すれば反映されると思います。

~/workspace/my-app/
|– .platform
|  \`– nginx
|    \`– conf.d
|      \`– myconf.conf
`– other source files

■公式ドキュメント
・Elastic Beanstalk Linux プラットフォームの拡張
https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/platforms-linux-extend.html

■おまけ
どうして公式に記載されている内容をわざわざ投稿したのかというと、全然検索に引っかからないからです。
[413 Request Entity Too Large]エラー対応でconfを編集する必要があり、
調べると2通りの記述方法が引っかかりました。

1. [.e

元記事を表示

Rails + postgres で jsonb の中の Array をクエリする方法

難しかったのでメモ

### データの形
こんな感じのが jsonb のカラムの中に保存されている。

“`json
{
hoge: String,
items: String[]
}
“`

### やりたいことと解決策
それでやりたいのは `items` の中に特定の文字列 `[“a”, “b”, “c”]` のいずれかが含まれているものをクエリすること。

結論としては次のようなコードでいけた。

“`ruby
items_to_query = [“a”, “b”, “c”]
Model.where(“jsonbColumnName -> ‘items’ @> ?”, items_to_query.to_json)
“`

### 参考
https://stackoverflow.com/questions/35737931/rails-postgres-query-with-jsonb-array
https://www.postgresql.org/docs/9.4/functions-json.html

元記事を表示

Graphql-rubyでのエラーハンドリング

# はじめに
最近、graphql-rubyでAPIを実装しています。
そこで、graphqlでのエラーハンドリングについて、ベストプラクティスを模索してみました。
まだ始めたばかりなので、もっといい方法あるよ!っていうコメント募集中です。
# エラーの分類
エラーハンドリングの実装に移る前にエラーにはいくつか種類があるので、紹介します。
以下の記事が非常にわかりやすく、まとまっていたので参考にしています。

[Railsアプリケーションにおけるエラー処理(例外設計)の考え方](https://qiita.com/jnchito/items/3ef95ea144ed15df3637)

ここでは、以下のように異常系と準異常系の2つに分類します。

– 異常系:nwエラーや、プログラムのエラー(システムエラー)
– 準異常系:作り手が予期できるエラー(業務エラー)

この2種類のエラーに対して、以下のような要件があります。

– 異常系:フロント側でテンプレートメッセージを表示 & 開発者に通知
– 準異常系:エラー内容や回避方法をフロント側(この辺りは要件によって変わってくるかもしれま

元記事を表示

No template for interactive requestの対処法

アプリ作成中にNo template for interactive requestが発生した。

####エラー
私の場合は
No template for interactive request
PagesController#index is missing a template for request formats: text/html

であった。

“`ruby:routes.rb
Rails.application.routes.draw do
resources :pages
root ‘pages#index’
end
“`

“`ruby:pagescontroller
class PagesController < ApplicationController def index end end ``` ビューファイルもしっかりapp/view/pagesにindex.html.hamlで作成していたので、原因がわからず解決できなかった。 ####原因 PagesController#index is missing a templ

元記事を表示

ターミナルでコマンドを実行した際にOperation not permitted が表示された場合の対処法

#####[rails中級チュートリアルアプリ作成](https://techracho.bpsinc.jp/hachi8833/2018_02_06/51401)
の最中にトップページへのルーティング、コントローラー作成をし、rails sを実行しようとしたところ、

“`ruby:ターミナル
Operation not permitted
“`
と、エラー文が表示されてしまった。

####解決法
システム環境設定→セキュリティとプライバシー→プライバシー→左に並んでいる中からフルディスクアクセスを選択→ターミナルにチェックを入れる。

これでターミナルを再起動すると解決する事ができた。

####参考サイト

ターミナルでコマンド実行時に「Operation not permitted」と表示される場合の対処法

元記事を表示

rails sを実行したら Address already in use と表示された時の対処法

####アプリ作成中にこのエラーに遭遇したため記録しておく

####解決したい事
rails sを行うと

“`ruby
Address already in use – bind(2) for “127.0.0.1” port 3000 (Errno::EADDRINUSE)
“`

とターミナルに表示されてしまいrails sを実行できない

####解決法

#####すでにrails sが他のターミナルなどで実行されているかを確認。

rails sが実行されているのが確認できなければ

“`ruby:ターミナル
% ps ax | grep rails
“`
を打ち込み出てきたプロセス番号を

“`ruby:ターミナル
% kill -9 プロセス番号
“`
でプロセスを止めることで解決する事ができる。

元記事を表示

OTHERカテゴリの最新記事