- 0.1. 【Rails】DMしたことがある人をマイページに表示して、チャットページにリンクできるようにする!【備忘録】
- 0.2. チャット一覧
- 0.3. RSpecをDRYにする
- 0.4. Rails dbconsole画面から抜けられなくなった
- 0.5. 今更だけど、Railsで頻出のコマンド集
- 0.6. [Rails]サクセスメッセージとエラーメッセージの出し方
- 0.7. Hanamiでraw sqlを実行してカラムにない結果を取得する
- 0.8. 【Ruby on Rails】redirect_toの使い方
- 0.9. [Rails] 画面遷移させない方法
- 0.10. if ~ .length != 0 空の値を探す
- 0.11. 【Rails】link_toメソッドの文字列の表示を省略させる方法
- 0.12. [Rails] render後にURLが変わってしまうことへの対処法
- 0.13. トップページ制作の時、画像の扱いで詰まったこと(超初心者)
- 0.14. Windows10 でRubyOnRails 4でindex.html.erb作成中の問題、解決方法
- 0.15. 文系未経験が1ヶ月Ruby Silver合格出来たまとめ
- 1. はじめに
- 2. 勉強開始時の状態
- 3. 勉強期間
- 4. 勉強方法と使用教材
【Rails】DMしたことがある人をマイページに表示して、チャットページにリンクできるようにする!【備忘録】
https://qiita.com/nojinoji/items/2b3f8309a31cc6d88d03
を用いてDM機能を実装した際、チャットページに飛ぶリンクをユーザーの一覧表示ページ以外に実装したい!と思ったことがある方も多いと思います。
そこで、一度DMのやりとりをしたことがある人に関しては、以下の画像のようにユーザーのマイページからチャットを再び再開できるようにしようと思います。(LINEのマイページみたいなイメージですかね)
解説は気が向いたら書きます!
#view/users/show.html.erb
“`
<% if current_user.id == @user.id %>チャット一覧
<%= @rooms.each do |r| %>
<%= r.users.each do |u| %>
<% if u.id == current_user.id %>
<% else %>忘備録です。
参考文献
Everyday Rails – RSpecによるRailsテスト入門
https://leanpub.com/everydayrailsrspec-jp##サポートモジュール
コードの重複をなくす手法であり、処理の共通化などを行う(ログイン処理等)。
例えば、ログイン処理を事前に行うテストが5つあったとして、ログインボタンの変更があった際には5箇所の変更が必要になる。
これを一つのモジュールに切り離しておくことで、修正を最小限に保ちつつ可読性も高められる。下記のログイン処理をモジュールに切り離してみる
“`
#ログイン画面を取得
visit root_path
#サインインをクリック
click_link “Sign in”
#Emailテキストフィールドにユーザーのメールアドレスを入力
fill_in “Email”, with: user.email
#上記と同じく、パスワードを入力
fill_in “Password”, with: user.password
#ログインボタンをクリック
click_button “Log in”
“`
Rails dbconsole画面から抜けられなくなった
#問題
Railsアプリ作成時にSQLite操作画面から抜けられなくなった#実行環境
・rails -5
・AWS Cloud9#エラー内容
DB作成後に、テーブルが作成されているかを確認する為に以下のコマンドを入力しました。
“rails dbconsole“↵
“sqlite> .table“↵
作成したテーブルが確認出来たので以下のコマンド(タイプミス)でSQLite画面から抜けようとしました。
“sqlite> exit“↵ **exit** → ✖
すると画面に
“…> “
の表示が出て、正規コマンド(**.exit**)を入力してもコンソール画面を抜ける事が出来なくなりました。#解決方法
調べたところ、 “…> “ は*入力継続のプロンプト* なので **;** を入力して打ち消せします。
“…> ;“↵
“exit”はエラーでしたよ。の表示のあとに通常のSQLite入力画面に戻るので正規コマンド(**.exit**)を入力してコンソール画面を抜けます。
“Error: near “exit”: syntax error
今更だけど、Railsで頻出のコマンド集
#はじめに
アプリケーションを作成する度に、カリキュラムを確認していたので、覚えるためにも、ここにまとめておく。
###新規アプリケーションの作成
“`bash
rails new アプリケーション名 -オプション
“`
`new`の前にrailsのバージョンを指定することも可能。
ex)`_6.0.0_`
オプションには、データベース管理システムを指定できる。
ex)`-mysql`###新規データーベースの作成
“`bash
rails db:create
“`###サーバー立ち上げ
“`bash
rails s
“`commond + Tで別のタブで行うとよい。
「control + C」でサーバーを止める。###コントローラー生成
“`bash
rails g controller コントローラー名(複数形)
“`コントローラー名の後に半角スペースを空け、アクション名を追加することで、コントローラーにアクションが記述された状態で生成される。
###モデル生成
“`bash
rails g model モデル名(単数形)
“
[Rails]サクセスメッセージとエラーメッセージの出し方
#はじめに
twitterのようなアプリで投稿する際のサクセスメッセージやエラーメッセージの出し方についてまとめてみました。僕自身初めてこの機能をつける時手間だったので同じような悩みを持つ人のために投稿します。#バージョン
“`
ruby 2.5.7
Rails 5.2.4.3
“`#サクセスメッセージの出し方
“`ruby:コントローラー
flash[:notice] = “successfully”
“`
コントローラーのcreateアクションとupdateアクションのなかに↑の記述をします。“`ruby:ビュー
<% if flash[:notice] %><%= flash[:notice] %>
<% end %>
“`
サクセスメッセージを出したいビューのページに↑の記述をします。
これで、投稿できた際に”successfully”という文字が出てくると思います。#エラーメッセージの出し方
“`ruby:ビュー
<% if @book.errors
Hanamiでraw sqlを実行してカラムにない結果を取得する
# readしてmap
“`ruby
class UserRepository < Hanami::Repository def join_posts users.read("SELECT users.id, posts.id as post_id from users joins posts").map.to_a end def age_average users.read("SELECT avg(age) as age_average FROM users").map.first end end repo = UserRepository.new repo.join_posts => [ {:id=>1, :post_id=>2},
{:id=>2, :post_id=>3}]repo.age_average
=> {:age_average=>33}“`
これで複雑なquery投げれる
わりとハマった### 参考
https://github.com/hanami/model/issues/477
【Ruby on Rails】redirect_toの使い方
# はじめに
コントローラー内で処理が終わった(終わらなかった)後に
どのページに遷移させるかを考えないといけませんが、
その際にredirect_toを使用します。# redirect_toとは
指定したURLに遷移させることができるメソッドです。“`rb:基本的な書き方
redirect_to “リダイレクト先”
“`# 実際のコード
このコードに関しては、使えるものがあり次第更新していきます。“`rb:URLで指定
redirect_to “https://qiita.com/japwork”
“`
“`rb:path名で指定
redirect_to root_path
“`
“`rb:アクション名で指定
redirect_to action: :index
“`
“`rb:異なるコントローラーのアクション名で指定
redirect_to controller: :post, action: :index
“`
“`rb:前のページに戻る
redirect_to :back
“`
“`rb:同じページをリダイレクトする
redirect_
[Rails] 画面遷移させない方法
#はじめに
Railsのみでいいね機能やコメント機能をつくる時、画面を遷移させない方法を見つけるのに苦労したため同じような悩みを持つ方のために投稿します。#バージョン
“`
ruby 2.6.3
Rails 5.2.4.3
“`#ズバリ
“`ruby
redirect_to request.referer
“`
ずばり、この1行をコントローラーの最後に記述しましょう。
そうすればボタン押した後も画面遷移しないはず!redirect_toについて詳しく知りたい方は[こちら](https://pikawaka.com/rails/redirect_to)の資料がおすすめ。
if ~ .length != 0 空の値を探す
## 空の値
課題として出品されている商品を一覧で表示するという機能を実装しているときのこと
if文で、ある条件式を書いていたそれは、
####インスタンス変数が空であるとき、代わりにダミーの商品を表示せよ
というもの
if文やね
これは楽勝やろと意気揚々と取り組み始めた
記述し終わり、挙動を確認したが…#####ダミーの商品が表示されない!
“`ruby:items_controller.rb
def index
@items = Item.order(‘created_at DESC’)
end
“`“`ruby:index.html.erb
####################↓DBに保存されている商品を表示する↓####################
<% if @items %>
<% @items.each do |item| %>- <%= link_to item_path(it
【Rails】link_toメソッドの文字列の表示を省略させる方法
#環境
macOS 10.15.5
Rails 5.2.4.2
Docker 19.03.12#link_toメソッドの文字列の表示を省略させる方法
こちらの画像をご覧ください。投稿一覧画面に表示された投稿の本文ですが本文全てがそのまま一覧画面にも表示されてしまっているため、このようにすごく見栄えが悪くなってしまっています。
![スクリーンショット 2020-10-30 14.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587506/a058c7af-0710-74bb-ad6e-41057a63d563.png)これを以下のようにスッキリさせます。
![スクリーンショット 2020-10-30 14.55.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587506/68b88687-c941-af2c-491d-6fd3d4895744.png)##truncateメソッドを使う
省略す
[Rails] render後にURLが変わってしまうことへの対処法
#前提
環境は以下の通りです。
Mac OS Catalina 10.15.7
Ruby 2.7.1
Rails 6.0.3.3自分の備忘録もかねて、できるだけわかりやすく記録しようと思います。
問題をわかりやすく示すためにここでは例としてRailsチュートリアルを用います。具体的には第7章でユーザー登録の機能を実装する際、バリデーションに引っかかって登録失敗後フォーム画面にrenderされるにあたり、URLが`/signup`から`/users`にURLに変わってしまうという問題、つまり
URLが`localhost:3000/signup`から`localhost:3000/users`に変わってしまう
→usersに対応するviewを作っていないためリロードするとエラーが出てしまうという問題について解決方法を解説します。
#原因
createアクションでユーザー登録に失敗した時に`render ‘new’`するということはnewアクションを呼ばず、viewだけを切り替えているということです。
createアクションは/usersなのでアクション後は当然URLは`
トップページ制作の時、画像の扱いで詰まったこと(超初心者)
タイトルの通り。
OSはmacで、rubyとrailsを勉強しているので.html.erbと.scssで書きました。画像ファイルを読み込もうと思った時
“`erb:home.html.erb
<%= image_tag “Hogehogeホゲホゲ.jpg” %>
“`
↑と記述したら、ブラウザで表示されない!
sprockets::rails::helper::assetnotfound エラー<解決した方法>
“`erb:home.html.erb
<%= image_tag “Hogehogehogehoge.jpg” %>
“`にすることで表示された。つまり名前をすべてアルファベットにしたら解決した。
背景に画像を使いたいとき
“`scss:custom.scss
background-image: url(../images/hogehoge.jpg);
“`↑だと表示されず、
<解決した方法>
“`scss:custom.scss
background-image: url(hogehoge.jpg);
“`にすると表示されるよ
Windows10 でRubyOnRails 4でindex.html.erb作成中の問題、解決方法
# Windows10 でRubyOnRails 4でindex.html.erb作成中の問題、解決方法
bin/rails …コマンドでviews内にindex.html.erbファイルを作成する際に、
「このファイルを開く方法を選んでください」というウィンドウが開かれ、index.html.erbファイルが作成されない時の解決方法を共有します。##環境
– システムの種類:Windows10 Home 64ビットオペレーティングシステム、x64ベースプロセッサ
– Rails version 4系##現象
1.bin/rails generate controller welcome index コマンドを実施する。2.「このファイルを開く方法を選んでください」というウィンドウが開かれる。
![スクリーンショット 2020-10-30 130959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/5c8e45eb-aae4-0264-27ae-9f494c7340a7.
文系未経験が1ヶ月Ruby Silver合格出来たまとめ
はじめに
入社した会社に資格の祝金制度があったため、まずはRuby Silverを取得しようと勉強開始。
勉強期間約1ヶ月弱ほどで無事合格出来たので、これから受ける人の助けになればと思いまとめます。(Goldもこれから勉強予定)
ちなみに82点合格でした。
勉強開始時の状態
・文系未経験
・Rubyでの開発経験はもちろんなし
・自学習でProgateとRailsチュートリアルを3ヶ月ほどで一通りRails チュートリアル に出てくるコードもRubyのコードなのか、Rails特有のコードなのか区別がつかない状況でした。
勉強期間
約3週間
入社研修を受けながらの勉強だったので、
・平日 約2時間
・週末 2日合わせて約5時間
トータル約40時間程という感じで、もちろん疲れて全く勉強をしない日も数日はありました。
勉強方法と使用教材
簡単に私が行った学習方法を紹介します。
まずは一通り教本をさらっと読む
railsでgemfileの’devise”bootstrap’をインストール後、urlがエラー時の対処
発環境
・macOS Catalina 10.15.7
・Ruby 2.6.6
・ Rails5.1.6
railsチュートリアルが終わり、初めてオリジナルアプリ制作に取り掛かった際のエラーの解消法をメモします。
gemfileに以下を追加し“bundle install“
gem ‘devise’
gem ‘bootstrap’, ‘~> 4.4.1’
gem ‘devise-bootstrap-views’, ‘~> 1.0’“rails routes“ から“/users/sign_up“を確認。
http://localhost:3000/users/sign_up
を検索時のエラー
![スクリーンショット 2020-10-30 13.13.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689433/1e1a7525-d186-3f4b-0ca8-94acf796b5ee.png)
“@import “bootstrap-sprockets”;“を削除してみ
Fat Modelをリファクタリングする
ActiveRecordのモデルをリファクタリングする方法は「[Fat ControllerをリファクタリングしてDDDっぽくする](https://qiita.com/linyclar/items/52ee50fd5d6452bc0370)」でも言及しましたが、このエントリではさらに深掘りします。
エンタープライズアプリケーションアーキテクチャパターン(以下、PofEAA)を読んで理解している人向けに手短に表現すると以下の通り。
* ActiveRecord(Rails)のモデルを行データゲートウェイ(PofEAA)として使用する
* ActiveRecord(Rails)のモデルのインスタンスはドメインモデル(PofEAA)のデータホルダーとして使用する
* データマッパー(PofEAA)によってActiveRecord(Rails)のモデルとドメインモデル(PofEAA)の対応付けを行うPofEAAを読んでいない、読んだけど忘れたという人は続きをどうぞ。
# まずはValueObjectなどを見つけて独立させる
ValueObjectやState、CalcRule
Windows10 でRubyのバージョンをアップグレード、切替え
# Windows10 でRubyのバージョンをアップグレード、切替え
新しいRubyonrailsプロジェクトを始めようと
rails(バージョン)new (プロジェクト名) コマンドを打ち込んだところ、
gem install byebug -v ‘11.1.3’ コマンドを実行してね
とのエラーが発生、コマンドを打ち込んだところ、
Rubyバージョンをアップしてね
とのエラーが発生。
ここでwindowsでのRubyのバージョンをアップする方法、管理するツールを共有します。##今回Rubyバージョンの変更前後
変更前:ruby 2.2.6p396
![スクリーンショット 2020-10-30 114317.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/47a75dde-09d4-579b-44c8-e4d2af6d98cb.png)
変更後:ruby 2.4.10p364
![スクリーンショット 2020-10-30 114332.png](https://qiita-imag
Fat ControllerをリファクタリングしてDDDっぽくする
いきなりですが、こんな感じのFat Controllerのアクションがあるとします。
“`ruby:reports_controller.rb
class ReportsController < ApplicationController def create @report = Report.new(report_params) if @report.status == Report::STATUS_DRAFT if @report.save redirect_to @report else render :new end else result = false ApplicationRecord.transaction do # レポートのレビューリクエスト if @report.report_type == Report::REPORT_TYPE_REVIEW_REQUEST # レビュワーに通知したり、メ
メソッドがあると便利な値を探してValueObjectにしよう
ドメイン駆動設計について調べていると、データベースのカラム全部にValueObjectを作っちゃった話とか、値を入れるだけでメソッドが一つもないValueObjectを作っちゃった話とかたまに見かけます。
こういうのは、ValueObjectの「不変で交換可能で値として等価で〜」という定義に意識がむきすぎちゃった結果なのかなと思います。
そういう定義はわきに置いて、「メソッドがあると便利な値ってないかな?」という発想の方が本当に必要なValueObjectを見つけられるんじゃないかな、というのがこのエントリで言いたいことです。# ValueObjectのパターン
本題に入る前に、どんなメソッドがあると便利かわかっているとValueObjectを見つけやすいので、そちらについて話します。
私が見つけているValueObjectのパターンは4つあります。* ラッパーValueObject
* 計算可能なValueObject
* センシティブなValueObject
* インセンシティブ(鈍感)なValueObject## ラッパーValueObject
コード値などを
複雑な計算があるならCalcRuleクラスを作ろう
計算処理があると関連するActiveRecordモデルにメソッドを作りますよね[^1]。
“`ruby:product.rb
class Product < ApplicationRecord def billing_price price * consumption_tax_rate end def consumption_tax_rate # 消費税率を返す end end ``` [^1]: 本題ではないので省略してるけど、浮動小数点数の計算はちゃんとやろう!=>[[Ruby]消費税計算にはBigDecimalを使いましょう](https://qiita.com/jnchito/items/d0ef71b25732ad5a881c)税込金額を計算するぐらいなら、そこまで問題を感じません。ただ、キャンペーンで値引きするようになったり、値引き条件が複雑になってくると、商品クラスが金額計算クラスのように思えてきます。
“`ruby:product.rb
class Product < ApplicationRecord def bi