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

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

備忘 railsのrake_taskでmodelを更新するときに反映されない..

なぜか、updateやcreateがtrueで完了するのに、更新が反映されなかった。

結局は、validateエラーになっていたのだが、そのレスポンスがなくてハマった。

以下のコマンドでvalidateを確認出来る。

“`
MODELインスタンス.valid?
pp(MODELインスタンス.errors.messages)

“`

元記事を表示

Gitフックでgit commit時にRubocopを走らせる方法

Gitに備わっているGitフックのpre-commitという機能を使って、
`git commit`時にRubocopを走らせる方法を紹介します。
[- Gitフックとは](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF)
[- appbrew Tech Blog (pre-commitとは) ](https://tech.appbrew.io/entry/2020/05/15/132413#pre-commit%E3%81%A8%E3%81%AF)

### 手順1.
chmodコマンドで、設定を記述する`.git/hooks/pre-commit`の実行権限を与える

https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95

“`:ターミナル
chmod a+x .git/hooks/pre-commit
“`

###

元記事を表示

railsチュートリアル第五章 Userコントローラ

##ユーザー登録: 最初のステップ
この節では、レイアウトとルーティングの取り組みにおける頂点として、“`ユーザー登録ページへのルーティングを作成“`
“`2番目のコントローラを作成“`することになります。
これは、“`Webサイトでユーザー登録を行えるようにするため“`の最初の重要な一歩となります

次の一歩であるユーザーのモデリングは第6章で行い、第7章でユーザー登録が完成。

###Userコントローラ
最初のコントローラである“`StaticPagesコントローラを作成“`
2番目のコントローラである“`Usersコントローラを作成“`
“`generate“`を実行して、現時点での要求である“`新規ユーザー用のユーザー登録ページ(スタブ)を持つ“`、最も簡単なコントローラを作成
Railsで好まれているRESTアーキテクチャの規約に従い、“`新規ユーザー用のアクションをnew“`を使う。
“`generate controllerの引数にnew“`を渡して、“`自動的にアクションを作成“`してみましょう。
####Usersコントローラ

元記事を表示

Railsプロジェクトのペネトレーションテストで指摘事項

# 0. はじめに
これまで複数の企業にてRailsプロジェクトに携わらせていただきましたが、その中で何度かペネトレーションテストを行っていただく機会に恵まれました。そこで、本記事では過去に指摘されたことのある事項を紹介したいと思います。なお、ここで紹介した指摘はすべて修正済みとなっています。

# 1. Cookieセッションでログイン
### 指摘事項
Rails.application.config.session_storeで:cookie_storeが指定されており、Cookieが盗み取られると不正ログインができてしまう

### 対策
Railsはデフォルトではセッション情報はCookieのみに保存し、サーバーサイドで保存しません。これでは、Cookieが盗み取られてしまうと不正にログインが可能となってしまいます。そこで、redisやactiverecord-session_store[^1]を利用して、セッション情報をサーバーサイド側に持たせる必要があります。
リレーショナルデータベースを利用しているのであれば、activerecord-session_storeを利用す

元記事を表示

railsチュートリアル第五章 リンクのテスト

###リンクのテスト
レイアウト内のいくつかのリンクを埋めることができたので、これらのリンクが正しく動いているかどうかチェックするテストを書いてみよう。

ブラウザを立ち上げてルートURLにアクセスし、それぞれのリンクをクリックして確かめることもできる。
しかし変更する度にこの作業を毎回繰り返していくのは大きな負担です。
そこで、「“`統合テスト(Integration Test)“`」を使って一連の作業を自動化してみよう。
アプリケーションの動作を端から端まで(end-to-end)シミュレートしてテストすることができます。

site_layoutというテストのテンプレートを生成するところから始めてみます。

“`
rails generate integration_test site_layout
invoke test_unit
create test/integration/site_layout_test.rb
“`
Railsは渡されたファイル名の末尾に _test という文字列を追加することに注目

今回の目的は、アプリケーショ

元記事を表示

【Rails】form_withに関する基本知識

# form_withメソッドとは
フォームを実装するためのヘルパーメソッドです。
ヘルパーメソッドとは、主にビューでHTMLタグを出現させたりテキストを加工するために使用するメソッドのことです。
HTMLのformタグの代わりに使用できます。

**【例】HTMLのフォーム記述**

“`



“`
↓↓これをこのように書き換えることができます
**【例】ヘルパーメソッドを用いたフォーム記述**

“`
<%= form_with url: "/posts", method: :post, local: true do |form| %>
<%= form.text_field :content %>
<%= form.submit '投稿する' %>
<% end %>
“`

ヘルパーメソッドはRubyとして取り扱われるので、表示する

元記事を表示

【Rails】Cocoonを用いて親子テーブルの内容を任意の数だけ保存する。

#この記事/メモについて

本記事では”cocoon”というgemを用いて、モデルに紐づいた子モデルの内容を同時に保存できるようにします。

具体的には以下のようにして、
menuの投稿時にhas_manyで紐づいたfoodモデルを、
またfoodモデルにhas_manyで紐づいたmaterialモデルを任意の数だけ保存できるようにします。

![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409257/1c95e397-6016-8a32-a49c-ebc9628fb38c.gif)

ここでは、表のような情報を開発者が入れる初期データとして保存していこうと思います。

menuモデル

| ID | name   | plan |
|:–:|:———–:|:————————:|
| 1 | 献立①   | 朝ごはん用  |
| 2

元記事を表示

ルーティングについて勉強しなおそう

#ルーティングとは
受け取ったリクエストを認識し、適切なコントローラ内のアクションの実行をするもの。

“`ruby
HTTPメソッド ‘パス’, to: ‘コントローラ名#アクション名’
“`
上記のような書き方でroutes.rb内に記述していく。

###凡例

“`ruby
#ルーティングの記述
get ‘/samples/:id’, to: ‘samples#show’

#HTTPリクエスト
Get /samples/21
“`
上記のようにルーティングされ、HTTPメソッドが送られてきたとする。このリクエストはsamplesコントローラのshowアクションに割り当てられて、paramsには{ id: ’21’ }というハッシュが含まれている。

元記事を表示

Herokuデプロイ奮闘記2(前編)

(続編のつもりなかったんだけど…)

あまりにも苦戦したので…(笑)それと、色々タメになりそうなことも学んだので、アウトプットします!

# 今回の話の流れ
序章〜プロローグ〜 す べ て の は じ ま り
第1章 “[BUG] Segmentation fault at 0x0000000000000000” を除去する
第2章 “[BUG] Segmentation fault at 0x0000000000000000” を回避する
第3章 “NoMethodError: undefined method \`[]’ for nil:NilClass” を解決してデプロイする
第4章 Gem`sass-rails`を6系列にインストールし直してデプロイする
終章〜エピローグ〜 今回学んだこと

※ 前編は第2章まで

# すべてを解決に導く結論
**`image-url`ヘルパーはSassによるもの**なので、これを使用しているスタイルシートは、CSSではなくSCSSファイルでなければならない。これだけだっ

元記事を表示

クラスを自作してオブジェクト指向を学ぶ

##経緯
習作としてQiitaを模した簡易版Webアプリを作成途中、オブジェクト指向を学ぶべく自作のクラスを作ることになったのでそのリファクタリングの経過を残す

##前提
記事(Article)クラスが存在

##環境
MacOS BigSur Ver11.5.2
Ruby 3.0.2
Rails 6.1.4.1

##広告クラス作り方
1. viewsにとりあえずの完成形を表示させてみる
2. controllersにコードを移して表示させてみる
3. modelsにコードを移して表示させてみる
4. adモデルを作ってarticleモデルから独立させてみる
(articleモデルの中に広告に関するメソッドがあるのは今後見づらいので)

### ①viewsに画像リンクベタ貼り
広告となる画像を5つ用意

“`app/views/articles/show.html.erb

GithubActions Errno::EACCES: Permission deniedの解決

# 起こっていること

GithubActionsを用いて自動デプロイした際に急に
Errno::EACCES: Permission denied @ apply2files – のエラーがでました。

# エラー内容
すごく長いので要点の箇所だけ抜粋します。

“`
rails aborted!
Errno::EACCES: Permission denied @ apply2files – /home/***/Beginners_Camp/tmp/cache/assets/sprockets/v3.0/NT/NTu0FZHjIrwvcxJ1nnTegT5SvGLkugb1ZWoTRebr0jo.cache

~省略~

bin/rails:9:in `


Tasks: TOP => assets:precompile
(See full trace by running task with –trace)
Error: Process completed with exit code 1.
“`

`Error: Process completed with

元記事を表示

遅いRSpecのコードを改善したときのお話

# 初めに
Jenkinsサーバがやけに不安定で、高負荷の影響により503エラーが発生していました。これはまずいということで、原因を調べていたところ、めちゃくちゃ重いRSpecのコードを発見。これを改善したときのお話をここに書きます。

# 環境設定
– OS: Windows10 Pro 64bit
– Version: 1909
– OS build: 18363.1256
– WLS
– Ubuntu 20.04
– Ruby 2.7.2
– Rails 6.0.3.3

# 問題があるテストコードの特定
ローカルですべてのテストコード実行するのも時間かかるので、Jenkins上で実行しているテストコードの単位を分割して、様子見てみます。

“`shell:JobScript
# ディレクトリごとに分割して、実行 –profile オプションで遅いテストケースを20個ほど表示
bundle exec rspec –profile 20 spec/controllers/*
bundle exec rspec –profile 20 spec/dec

元記事を表示

【RSpec】expected `User.count` to have changed by 1, but was changed by 0というエラーの解決方法

#対象者

* タイトル記載のエラーに苦しんでる方
* RSpecテストのコードを書いている方

#目的

* エラーを解決して、テストを正常に稼働させる

#実際の手順と実例
###1.前提と現状

![スクリーンショット 2021-09-21 21.18.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1681213/ce96bf4f-b8a5-fbf8-131c-3a6a1e50f900.png)

ユーザーの新規登録が成功するかどうかのテスト実行時にこのようなエラーがでました、、、

直訳すると

““
User.count “が1だけ変化したと思ったら、0だけ変化していた。
““
 
推測すると新規登録が正常に行えず、Userが1人増えなかったということだと思いました。

該当ソースコードは以下の通り

““`spec/system/before_login_spec.rb
describe “ユーザー新規登録のテスト” do
before do

元記事を表示

railsチュートリアル第五章 ユーザ登録用url

###ユーザー登録用url
新規ユーザー用の動作するページが“`/users/new“`にできました。
URLは“`/users/new“`ではなく表のとおりに“`/signup “`にしたいと思います
ユーザー登録URL用に“`get ‘/signup’ “`のルートを追加します

####ユーザー登録ページのルート red

“`rb
Rails.application.routes.draw do
root ‘static_pages#home’
# 何の意味がわからん
# ホーム画面がhomeページなるらしい
get ‘/help’, to: ‘static_pages#help’
# static_pagesコントローラからhomeアクションに紐付けされる
# getでアクセルすることでページを取得することができる
get ‘/about’, to: ‘static_pages#about’
# 何を書いているかはわからない
get ‘/contact’, to: ‘static_pages#contact

元記事を表示

実務未経験者がRailsでアプリケーションを作成してみた【Rails / Vue.js / AWS】

#はじめに
こんにちは、かわらと申します!
この記事は実務未経験者が独学でアプリケーションを作成した内容を解説したものです。
またアプリケーションを作成するにあたり学習した内容もまとめました。

転職活動中のため、ご興味ある方がいましたら下記のtwitterアカウントよりご連絡をいただけると幸いです。
twitterアカウント

GitHubアカウント
https://github.com/kawarazaki3782/teamcare
アプリのURL
https://www.teamcare-app.com/
#目次
・作成したアプリケーション
・学習内容
・心がけたこと
・さいごに
#作成したアプリケーション
アプリ名[チームケア]
介護者同士や介護者と事業者の交流を目的としたSNS

###開発した背景
このアプリの目的は介護者を孤立させないことです。
私は約10年間、介護の仕事をしてきました。
その中で自宅で介護する人が孤立してしまう問題に遭遇してきました。
介護者を支援するサービスはありますが、その存在を知らなかった

元記事を表示

railsチュートリアル第五章 名前付きルート

####名前付きルート
ルートを定義したことにより、レイアウトの中で名前付きルートが使えるようになりました
速、link_toメソッドの2番目の引数で、適切な名前付きルートを使ってみましょう。

“`html
<%= link_to "About", '#' %>
“`
置き換え

“`html
<%= link_to "About", about_path %>
“`
HomeページとHelpページへのリンクを持つheaderパーシャル _header.html.erbから取り掛かります。
headerパーシャルでは、Web共通の慣習に従って、ロゴにもHomeページへのリンクを追加
#####headerパーシャルにリンクを追加する

“`html

元記事を表示

【Rails】FontAwesomeの使い方/アイコンにアニメーションを付ける

FontAwesomeの使い方に関してアウトプットしていきます。
Qiitaへの投稿に不慣れなため、稚拙な部分もありますがご了承ください。

この記事の構成は下記の通りです。
①FontAwesomeのアカウント作成
②FontAwesomeの使用準備
③FontAwesomeの使い方
④アイコンの大きさや色を変えたり、アニメーションを付ける
⑤ブランドアイコン使用時の注意点

# ①FontAwesomeにアカウントを作成する
まずは自身のアカウントを作成する必要があります。
[Fontawesome公式ページ](https://fontawesome.com/)
![409580c4dec3457902a3768a8cbed3b7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1884909/628d3b84-3376-dfb0-4ded-f73c7d28a225.png)

Start for Free:無料。一部のアイコンのみ利用できる。
Get More with Pro:有料。全てのアイコン

元記事を表示

[ruby]約数を足し算する方法

# はじめに
本記事では、私が本日取り掛かった問題を備忘録として記述します。

# 内容
1111111111の約数で、1111以下の約数を足す。

divisor = 約数 by Google先生

“`divisors.rb
def divisors(num, limit)
(1..limit).select{ |i| num % i == 0 }.sum
end

puts divisors(1111111111, 1111)
“`

1~limitまでの約数で` (1..limit)`、
今回の数字(1111111111)がi(ある数)で割ると0になるもの達の`.select{ |i| num % i == 0 }`、
合計`.sum`を出す。

ターミナル上にて、

“`
% ruby divisors.rb
775
“`

`775`が答えです。
なるほど、プログラミングすごい。w

# 終わりに
このような数学の問題、解く分には好きなんですが、
如何せん実力不足の知識不足で、40,50分ぐらいかかります。

もっと経験して、解けるようにしたいと思います。

元記事を表示

[Rails]初のbundle installでmysql2のエラーが出た時の解決策をまとめてみた

# はじめに
開発環境を整えているとき、初のbundle installにて以下のようなエラーが出ました。

“`
Installing mysql2 0.5.3 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

(中略)

Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.

(中略)

An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue.
Make sure that `gem install mysql2 -v ‘0.5.3’ –source

元記事を表示

OTHERカテゴリの最新記事