- 1. 部分テンプレート
- 2. Ruby 引数
- 3. 配列をactiverecordへ変換する
- 4. Ruby on Rails Webアプリケーションの雛形を作ろう
- 5. ActionView::MissingTemplate in Devise::Registrations#Newエラー
- 6. &. (ぼっち演算子)
- 7. rails db:create 違うdevelopment生成
- 8. Slack::Notifierをrspecでmockする
- 9. [Rails7]kaminariを実装するときに起きたエラーと対処法
- 10. [Rails]実務のコードは膨大すぎて大変だった。全体のコードの把握するためのコツとは。
- 11. [Ruby&VSCode]のメソッドジャンプの設定方法
- 12. RailsでMySQLの全文検索をいい感じに書きたい
- 13. webエンジニアを目指して
- 14. 【Rails】診断機能を実装(徹底解説)
- 15. パスワードの表示/非表示を切り替える
- 16. rails初心者のためのtips
- 17. Rails7 にてサーバ起動時に Helper を Zeitwerk で読めず uninitialized constant ~~Helper (NameError) で落ちる
- 18. ストロングパラメータ
- 19. Rails Sprockets::Rails::Helper::AssetNotFound の解決に色々頑張った話
- 20. Rubyで本気で考えるnil safe
部分テンプレート
# 部分テンプレートとは
– 繰り返し使用するコードを取り出してひとつのファイルで管理できる仕組み# 部分テンプレートの作成
– 部分テンプレートとして運用するファイル名の先頭に_(アンダースコア)をつけるだけ
“`
_〇〇.html.erb
“`
### 部分テンプレート内の記述について
– 部分テンプレート内では、インスタンス変数を使用するのは適切ではないためローカル変数で記述する。# 使い方
“`
# 基本の記述
<%= render [部分テンプレートファイルの指定], [ローカル変数]:[渡す値] %>
# 使用例
<%= render partial: "ディレクトリ名/〇〇", locals: { post: @post } %>
# これで部分テンプレートのなかで、postのなかに@postを格納できる
“`
– renderメソッド
部分テンプレートを呼び出すメソッド– partialオプション
renderメソッドで使用
オプションで部分テンプレート名を指定して、部分テンプレート呼び出せる。– localsオプション
renderメソッド
Ruby 引数
# 引数とは
メソッドに渡すことができる値のこと。# 実引数と仮引数
“`ruby
def メソッド名(仮引数)
# 処理
end# メソッドの呼び出し
メソッド名(実引数)
“`
メソッドを定義したときに()内に記述しておき、処理に利用するときは***仮引数***。
メソッドを呼ぶときに()内に渡す値を記述するのが***実引数***があります。“`ruby
def メソッド名(第一引数, 第二引数)
# 処理
endメソッド名(第一引数, 第二引数)
“`
引数は複数利用されることがあります。
そんなときは、()内、左から順に第一引数、第二引数、第三引数…と呼びます。例
“`ruby
def get_weather_forecast(weather)
puts “明日の天気は#{weather}です”
endget_weather_forecast(“晴れ”)
“`
“`
# ターミナル出力
明日の天気は晴れです
“`– この例の場合、実引数=”晴れ”、仮引数=weatherですね。
–
配列をactiverecordへ変換する
# はじめに
find_in_batchesメソッドはactiverecordに対してのみ使用できるので配列をactiverecordへ変換したい# 方法
配列に格納されたデータのidのみを別の配列に格納する
(push・・・配列に要素を追加)
“`
@channel_ids = []channels = user.channels
channels.each do |channel|
@channel_ids.push(channel.id)
end
“`idのみを格納した配列をwhere句へ指定して、再度データを取得することでactiverecordへ変換したデータが取得できる
“`
target_channels = Channel.where(id: @channel_ids)
“`# 参考文献
もっと簡単に書けました
“`where(id: user.channels.map(&:id))“`– [Railsで配列をActive Record Relationに変換したい](https://qiita.com/fgem28/items/25
Ruby on Rails Webアプリケーションの雛形を作ろう
# アプリケーションを立ち上げるときのコマンド
条件
– Railsのバージョンは6.0.0を用いる
– アプリケーション名は、「output_projects」
– データベース管理システムにMySQLを使用する“`
rails _6.0.0_ new output_projects -d mysql
“`# データベースを作成するためのコマンド
“`
rails db:create
“`
サーバーサイドは、アプリケーションとデータベースがセットで存在しています。
アプリケーションにおいて、データベースは必要不可欠なものです。# ローカルサーバーを起動するコマンド
“`
rails s
“`
sはサーバーのsです。
ActionView::MissingTemplate in Devise::Registrations#Newエラー
# エラー内容
`devise`を導入し、ユーザー新規登録画面とログイン画面を実装中のこと。
viewsファイルで`<% render %>`を用いて
部分テンプレートを呼び出そうとした際に発生。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/fa9c384b-6709-965c-5bb8-382fb97260c8.png)
現在の階層↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2929112/26b3001b-1d71-caa1-93a3-13d2bbb8af27.png)# 仮説
– 誤字脱字の確認
– renderの呼び出し方法(階層位置の確認)上記ではエラー解決に至らず。
[Qiita](https://qiita.com/pontarou194/items/47e130e9c7e08225f109)で調べたところ
~~~ruby
<%
&. (ぼっち演算子)
# はじめに
ぼっち演算子をつけるべきか、つけないべきかよく迷うのでメモ## ぼっち演算子
オブジェクトに対してとあるメソッドを呼び出した時
そのオブジェクトがnilでない場合・・・実行結果を返す
nilの場合・・・nilを返す## 使い方
“`オブジェクト&.メソッド“`## 迷いポイント
.&のまえのオブジェクトがnilの可能性がある場合につける①userがnilの可能性がある場合・・・すべてのメソッドの前にぼっち演算子が必要
user&.infomation&.credit&.id②userがnilの可能性がない場合・・・userのうしろにぼっち演算子は不要
user.infomation&.credit&.id③userとuserに紐づくinfomationもnilの可能性がない場合・・・userとinfomationのうしろにぼっち演算子は不要
user.infomation.credit&.id## まとめ
&. (ぼっち演算子)をつけるのは.&のまえのオブジェクトがnilの可能性がある場合のみ!!
※色々なところにつけると、コードを見た人
rails db:create 違うdevelopment生成
# はじめに
フリマアプリ作成時に`rails db:create`実行時に
アプリ名ではない`development`が作成されてしまうエラーが生じました。# 仮説
調べたところ↓
https://prograshi.com/framework/rails/change-db-name/`database.yml`での設定がおかしい様子。
~~~
development:
database:○○○○○○_developmenttest:
database:○○○○○○_test
~~~と修正後
`bundle install`
`rails db:create`実行後無事、解決できました。
Slack::Notifierをrspecでmockする
SlackNotifierのmock方法の記事が見つからなったため書いてみました。
“`rb
let(:slack_mock) { double(‘slack’) }subject { #処理を定義 }
# pingレシーバーを定義
before(:each) do
allow(Slack::Notifier).to receive(:new).and_return(slack_mock)
allow(slack_mock).to receive(:ping)
endit ‘Slack通知が実行されない’ do
expect(slack_mock).to receive(:ping).never
subject
endit ‘Slack通知が1回呼び出される’ do
expect(slack_mock).to receive(:ping).once
subject
end# メッセージまで検証したい場合は下記の通り
it ‘Slack通知に想定メッセージが渡され実行される’ do
expect_message = “test”
[Rails7]kaminariを実装するときに起きたエラーと対処法
# エラー1つ目
https://qiita.com/mmaumtjgj/items/771deb2f3da3eecb4f54こちらの記事を参考にpagenate機能を実装しようとしていたところ、undefined method `page’ for #
[Rails]実務のコードは膨大すぎて大変だった。全体のコードの把握するためのコツとは。
## 実務のコードは膨大すぎて大変だった!
Railsで下記のサービスを作ったことはありますが、やはり、実務としてのコードは膨大すぎて、初めて実務に入った時は大変な思いをしました。https://qiita.com/parkon_hhs/items/98304bc5112f0e0f6faf
私だけがわからなかったことかもしれませんが、膨大なコードを把握するために知っておくといい項目をいくつかまとめてみようかと思います。
## 環境
– Rails
– VSCode
– macOS## Railsのコードの動きの把握
最初にRailsのコードの把握するコツを紹介します。
#### どこにも定義されてないメソッドについて
例えば`post_controller.rb`に定義されてないのに使われているメソッドがありますね。
それは主に`modelで定義されたメソッド`か`gem専用のメソッド`の可能性が高いです。まずは`post_controller.rb`なので、`model/post.rb`を調べてみましょう。モデルメソッドがコントローラーで使われているかもしれません
[Ruby&VSCode]のメソッドジャンプの設定方法
## はじめに
Javascript&VSCodeでのお馴染みの`Go to definition`(`F12`キー)機能ですが、Rubyではデフォルトではない機能ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/372a17e4-a88a-f7cd-6cbf-87d9815ddf15.png)初めて実務でRailsのコードを読んだ時、メソッドを一つ一つ検索するのが面倒で、調べたら設定方法がありました。
現在はうまく活用できて作業効率アップにつながった機能ですね。それでは、ご紹介したいと思います。
## 設定方法
1. VSCodeの拡張機能(Extensions)アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2350392/8d1dcf41-dbe2-6dee-6fd5-d3539e509940.png)
2. `Ruby by Pe
RailsでMySQLの全文検索をいい感じに書きたい
バージョン Rails7.0, MySQL8.0
(AND -(OR) + OR -(OR)) みたいなことをやりたいなと思って、色々こねくり回したらこんなコードができました。
直接ANDとORをかけると途端に遅くなってしまう(MySQLが一度に使えるインデックスのなんかの制約に引っかかっているぽい? 要調査)ので、サブクエリを使って一度全体を引いた後に、ANDがあれば絞り込むみたいな挙動にしてみました。
モデルに直接書いたけどconcernぽくもできそう。
“`ruby
class Item < ApplicationRecord SUB_T = 'sub' class << self # 前提: search_target_column には検索対象となる文字列が入っていて、fulltext indexが貼られている # 作りたいSQL # select # T1.* # from # ( # select # * # from #
webエンジニアを目指して
現在、SES(客先常駐)企業でフロントエンドエンジニアをしているbachikoriです。
今日からwebエンジニアへの就職を目指して頑張ったことや気づいたことを投稿できたらと思います。
初めの投稿となりますので自己紹介や現在のスキル、転職しようと思ったきっかけなどを綴りたいと思います。# 自己紹介
現在、22新卒でSESの企業に所属しています。
大学は文系科目で情報系の学部に入りましたが、当時はプログラミングにあまり興味が持てませんでした。大学3年生後半に友達と受けたプログラミングの授業をきっかけにJavaScriptを勉強しはじめ、大阪から上京してきました。# 現在のスキル
– HTML/CSS
– JavaScript
– React(useState, useEffect, react-router-domが使える程度)
– ruby on rails(progateの課題を全て完了した程度)これからこちらの[gitihub](https://github.com/bachikori)に新しく学んだことを共有していきます。
# 転職しようと思ったきっかけ
現在行っ
【Rails】診断機能を実装(徹底解説)
今回は診断機能を実装していこうと思います
[こちらの記事](https://x.gd/bFoP4)を応用したものになりますので、必要があればご参照ください。# 目次
① 診断機能の実装イメージ
② 実装の下準備(診断内容の考察)
③ モデル・テーブルの作成
④ 診断するページを作成する
⑤ コントローラーを記述する
⑥ 診断結果を表示するページを作成する
おまけ① 診断結果を保存したい場合※すぐに実装を始めたたいという人は、①・②をとばし、「③ モデル・テーブルの作成」から始めてください
###### 実装環境
ruby 3.0.4p191 (2021-07-07 revision a21a3b7d23) [x64-mingw32]
Rails 6.1.5## ① 診断機能の実装イメージ
診断機能とはどういうものか、イメージを明確にしておきます
① 以下のサイトで実際に診断機能を動かしてみましょう
② 診断機能のプログラムの構造を図解します
まずは以下の写真を見てください
![image.png](https://qiita-image-store.s3
パスワードの表示/非表示を切り替える
## 環境
– Rails5.2
– Slim
– JavaScript## はじめに
パスワードを入力をする際、セキュリティのため、入力した文字が「・・・」で表示されます。それを、チェックボックスを使って、入力文字が表示できるよう、切り替えられるようにします。どのようにするのかといえば、HTMLの**input**タグの**typ**e属性を、**password**から**text**に変更するだけです。これだけで、入力文字が表示されるようになります。非表示にしたい場合は、input属性を逆に、textからpasswordに戻せばいいだけの話です。フロントエンド側の操作になるため、JavaScriptを使って実現させることになります。## 動き
チェックを外すと、パスワードが非表示になります。
![無題1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94029/d1806192-15dd-d713-ff70-38434251dd3c.png)チェックをつけると、パスワードが表示されます
rails初心者のためのtips
rubyをこれから学ぶ人のために簡単なtipsを紹介していきます。
## まずはモデルから作る
開発ではまずモデルが一番最初に作られる。
モデルはただのクラスだが、データベースと連携するクラスをrailsではモデルという。
rails g modelコマンド
## 初期データを入れる
seedを使うか、rails consoleで入れる。
seeds.rbにデータを書いて、rails db:seed コマンド
## データの登録、更新、検索はどうする?
ActiverecordはSQLを触ることなくデータベースの操作ができる。
例えばrails cで
Book.allはselect * from books;と同じ
railsとDBはActiverecordとDBMSによって結び付けられている
allメソッドでデータをすべて取ってくる。
findメソッドでデータベースからデータを検索して取得する。
>id=2
>Book.find(id)
createメソッドでデータを登録する
Book.create(category:”家賃”,amount: 7)
Rails7 にてサーバ起動時に Helper を Zeitwerk で読めず uninitialized constant ~~Helper (NameError) で落ちる
謎のエラーではまって、また日本語で検索しても英語で検索しても同じ問題に困っている人が見つからず、また原因もわからず時間をつかってしまいました。釈然としないところはありますが、もしほかの方で発生した場合に参考になるよう、起きたことと自分の対処を記録しておきます。
## 環境
– Ruby 3.0.5
– Ruby on Rails 7.0.4
– zeitwerk 2.6.6## 起きたこと
– サーバ起動時に ` uninitialized constant AccountConfirmationsHelper (NameError) ` が発生
– (起動時ログ全文は最下部に掲載)
– `load_defaults 7.0` でも `6.1` でも発生
– `Rails 6.1.7` では `load_defaults 6.1` でも問題なかった)
– `bin/rails zeitwerk:check` は問題ない
– エラーログで表示されている Helper は `rails generate controller` で自動生成された空の module
ストロングパラメータ
# 1.ストロングパラメーターとは
– パラメーターを受け取る際に指定したキーをもつパラメータを受けとるように制限をかけるものです
– 制限がないと登録されるべきではない、カラムのデータが送られてきた場合に、そのデータが保存されてしまいます# 2.基本の記述
“`:○○○_controller.rb
private
def message_params
params.require(:モデル名).permit(:保存させたいカラム名).merge(カラム名: 追加したいデータ値)
end
“`### 2−1.require(:モデル名) メソッド
– モデル名の部分には、今回送られてきたデータはどこのテーブルに保存したいのかを記載します。### 2−2.permit(:カラム名) メソッド
– カラム名の部分には、今回送られてきたデータはどのカラムに保存したいのかを記載します。
– `permit(:カラム名1, :カラム名2)`のように複数カラムを指定することも可能です。### 2−3..merge(カラム名: 追加したいデータ値) メソッド
–
Rails Sprockets::Rails::Helper::AssetNotFound の解決に色々頑張った話
# 始めに
仕事終わりにRails触るぞと思ってrails sをしてlocalhostにアクセスしようとしたらタイトルの通りトラブったので備忘録です。記事を調べた時にどれもこれも本番環境の話をしていたのでここでdevelop環境でエラーが起きた時の解消法を記事にしました。# 起きた現象
画面のスクショを取り損ねたのでコピペ文章を貼ります。
“`エラー:エラー
Rails Sprockets::Rails::Helper::AssetNotFound in Stations#indexThe assets “application.css” is not found in the assets pipeline.
“`
昨日は特に問題なく起動できたのになぜなんだ……application.cssなんて全く弄っていないが? ということで色々調べてみたのですが、どうもアセットパイプライン周りのエラーっぽいことがわかりました。ということで行った対処がこちら。
“`ターミナル
$ bundle exec rake assets:clean
$ bundle exec rake as
Rubyで本気で考えるnil safe
※ 本記事の内容は[作者のブログ](https://www.fumi-blog.link/articles/hz3ekqyxyyiv)にも書いているのでこちらも応援お願いします?♂️
## はじめに
以下のようなclassを考えます“` ruby
class Person
attr_accessor :first_name, :last_name
def full_name
last_name + first_name
end
end
“`このクラスは、苗字と名前を与えると、full_name関数でそれを合わせた形で取り出すことができます
“` ruby
person = Person.new
person.last_name = ‘山田’
person.first_name = ‘太郎’
puts person.full_name # 山田太郎
“`では、以下の場合はどうでしょうか
“` ruby
person = Person.new
puts person.full_name
“`実行すると以下のようなエラーが