db:migrate:rollbackで戻す。db:migrateを実行する。参考文献[Rails5]migrationファイルの削除方法(DB反映前/反映後)TweetQiitaで続きを読む投稿日:2020-02-14T21:06:34+09:00【Rails】中級者になるためのリファクタリングRailsのリファクタリングの記事は、良記事がたくさんあります。「初心者向け」を謳っているにしては項目が多くて、いきなり全部を意識するのは無理だなってなりました。初心者向けって謳い文句の記事に、自分のできていないことがたくさん書かれていると「お前は初心者以下だ」って言われているみたいでちょっと嫌な気持ちになりますね。他の方が書いた記事の中から、私がまず意識しようと思ったことをピックアップしてまとめようと思います。controllerを薄く、modelを厚く可能な限り処理をメソッドとして切り出して、controllerを薄くします。modelがFatになることは、最初は目をつぶります。viewの中の処理をhelperに移すviewの中に処理がゴチャゴチャと書かれていると、コードが混沌としてしまうので。パーシャルをどんどん使うパーシャルを使って、可読性と再利用性を上げます。jsはjsファイルにページごとのjsファイルを作り、そこに書く。繰り返し使う文字列をlocaleに定義するコードをDRYに。時刻のフォーマット等もlocaleを使い、strftimeは基本使わない。コードの行数を減らす基本的に以下の記事からのピックアップです。超良記事なのでまだ読んでいない人はぜひ。RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか最初はとっつきにくくても、短く書ける記法はどんどん使って慣れていくべき。慣れたら難しくないものも多そうだし、他の人が書いたコードを理解する能力も上がる。いえ全部いきなりは大変なので、まずは以下を意識する。ネストしない早めにreturnで返すなど、出来るだけネストを減らすことを意識します。RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか脱Rails初心者のためのリファクタリングガイド実務で学んだRailsの設計・リファクタリングTweetQiitaで続きを読む投稿日:2020-02-14T20:06:11+09:00【Rails】localeの使い方localeとはもともとは多言語化用の言語ファイル。フォーマットする時の形式、今日の日付を出力する時の形式などを管理する。'サンプル株式会社'ポイント呼び出し時、jaの部分は書かないlocaleファイルの名前は何でも良い。viewから呼び出す時はI18n.の部分を省略できる。'20/02/14'ポイントDateクラスやTimeクラスの値をセットすると、dateやtimeに定義した形でフォーマットするformatを省略するとdefaultの内容が適用される。lはlocalizeの略。ちなみにtはtranslateの略。created_atやupdated_atをI18n.l()でラップすると、timeに定義したフォーマットで出力される。95'モデルの情報を定義する主にエラーメッセージ中のモデル名や属性名を日本語化する目的で。階層分け・スッキリ管理する・conflictのリスクを減らすために、localeファイルを階層分けしてたくさん作ることも多い。階層分けをする場合config.i18n.load_pathの設定をすることで、config/locale直下のファイル以外も参照できるように設定します。'*.{rb,yml}').to_s]rails-i18nrails-i18nというgemを使うと、よく使う単語を全部一気に導入できます。多言語対応をする時には有用だと思いますが、日本語だけの場合はわざわざgemを入れなくても、上記のページに書いてある内容を全部コピペすれば良い気がします。大きさまで変える記事が見当たらなかったため投稿してみました。5.12.0上記の環境で実装いたしました。"font-awesome";上記の順番通りに記述したことで、FontAwesomeが使えるようになった。実行結果font-awesome-sassがインストールされたことにより、ヘルパーメソッドが使えるようになりました。このメソッドを使うことでアイコンを表示させます。'amazon-pay'これでアイコンが表示されました。今回使用したアイコン大きさを変更する上記で用いたヘルパーメソッドを用いることによって好みの大きさに変更することも可能です。fa-3x'このメソッドは次のように構成されています。大きさ指定をする場合は、アイコン名の後にスペースをあけ、'fa-(サイズ)'で好きな大きさに変更することができます。サイズに関しては公式サイトをご覧ください。Awesome最後に初めて記事を投稿してみました。分かりやすい記事になったかは不安ですが、誰かの助けになれば幸いです。TweetQiitaで続きを読む投稿日:2020-02-14T16:22:25+09:00RSpecでFactoryBotから複数のインスタンスをまとめて作成する【create_listを使用】RSpecテストを書いているときに、複数のインスタンスをまとめて作れる便利メソッドcreate_listをご紹介します。下記のようにnoteのファクトリが定義されているとします。endendテストでnoteインスタンスを5つ作りたいと思ったとき、下記のように1つずつ作るのは大変です。...endここで登場するのがcreate_listです。これを使えば、まとめてnoteインスタンスを作成することが可能です。...end第1引数に元になるファクトリ、第2引数に作成する数を指定します。=の部分は無くても可)ちなみに属性の一部を上書きして作成することも可能です(下記参照)。...end以上です。'pdf/bill'と書いて、`pdf/bill.pdf`にアクセスしても動くハマったところと対応フォントサイズが全部小さい普段のノリでフォントサイズを指定すると、全部小さく表示されます。フォントサイズを大きい数値に変更して対応。本番環境のみ、AssetPilelineのコンパイルエラーレイアウト内のCSS、JS、mysite.jpg読み込み部分を全て削除。CSSは全部インラインで記述。表題の通り、定数にアクセスできずに困った人のための記事です。結論Model名::定数名とすればOKです。下記のUserクラスがあるとします。...endViewから参照するには、下記のようにします。views/xxx.html.erb最大値は#{User::MAX_NUMBER}です。これが下記のようになっていると、views/xxx.html.erb最大値は#{MAX_NUMBER}です。ActionView::CompiledTemplates::MAX_NUMBERそんな定数は無いと怒られてしまいます。表題の通り、定数にアクセスできずに困った人のための記事です。結論Model名::定数名とすればOKです。下記のUserクラスがあるとします。...endViewから参照するには、下記のようにします。views/xxx.html.erb最大値は#{User::MAX_NUMBER}です。これが下記のようになっていると、views/xxx.html.erb最大値は#{MAX_NUMBER}です。ActionView::CompiledTemplates::MAX_NUMBERそんな定数は無いと怒られてしまいます。'Carol'TweetQiitaで続きを読む投稿日:2020-02-14T11:29:24+09:00ぼっち演算子Deviseを使ったRailsのコードがあるとします。これはDeviseを使用したときのcurrent_userに対して、nicknameカラムにあるデータを取得して@nicknameに代入することを意図したものです。current_user.nicknameただし、ログインしないときにこれを実行するとnilに対してメソッドを使おうとしてエラーになってしまいます。これを回避できる記述がRuby2.3からできるようになりました。それがどのような記述か、またそれはどのような動きをするのかについて説明していきます。operator(ぼっち演算子)などと呼ばれる演算子です。メソッドに続けて記述すると、そのメソッドがnilでなかった場合のみ右辺のメソッドが実行されます。nilだった場合は全ての演算結果としてnilを返します。@nicknameにnilが代入されます。使い勝手の良い演算子のため、覚えて活用していきましょう。ぼっち演算子という命名は、&の記号が一人ぼっちで膝を抱えている人に見えるところからきています。概要Railsのform_forを使っている箇所で、フォームを横並びにするのに少しハマったので、共有させていただきます。4.4.1方法bootstrapのグリッドシステム(rowとcol-(数字))を使う。フォームをdiv.rowで囲って、横並びにしたい要素をdiv.col-で囲む。(上記少し誤解を与える表現ですが、下記注意点をご参照ください)注意点form_forメソッドの外側でなく、内側にdiv.rowを配置する。%></div>以上です。その他Qiitaにちゃんとした(ちゃんとしてますか!?)投稿をするのが初めてでした。ご指摘あればぜひお願いいたします。目的Qiitaの記事に大まかな流れをテンプレート化しておき、作業効率を上げる。目的Qiitaの記事に大まかな流れをテンプレート化しておき、作業効率を上げる。scriptタグ内でRuby/Railsのメソッドを使用する際のescape_javascriptについてこの記事を書くきっかけjQueryを書いていると、scriptタグ内でRailsのメソッド(正確にはapplication_helper内のメソッド)を使用したいときがあります。正しい書き方をしないと正確に呼び出せないため、失敗した書き方と成功した書き方をまとめます。hogehoge_path_forとし、application_helper.rbに定義します。endendこれをとあるviewのscriptタグ内で呼び出します。hogehoge_path_forの返り値としたいです。%>;</script>普通はこう考えるはずですが、これだと呼び出せません。%>;</script>これも呼び出せません。失敗例3escape_javascriptというメソッドを使用します。これはaliasとしてjの使用が許されています。%>;</script>上記は下記と同じです。%>;</script>どちらも失敗します。失敗例4=をつけます。%>;</script>上記は下記と同じです。%>;</script>これもどちらも失敗します。失敗例5=を外して、''で囲います。%>';</script>上記は下記と同じです。%>';</script>これもどちらも失敗します。%>';</script>上記は下記と同じです。%>';</script>これで無事呼び出すことができました。TweetQiitaで続きを読む投稿日:2020-02-14T09:01:04+09:00Ruby初心者の「結局インスタンスメソッドって何ですか?」にエンジニア歴30年のベテランさん超絶わかりやすいアンサー!!!結論インスタンスメソッドとは:インスタンスが(に)使えるメソッド(にくっつくメソッド)助詞に関しては、インスタンスを主語として考えるか目的語として考えるかの違いです。図で表すとこんな感じインスタンスはいわゆる勇者。その勇者の剣がメソッド。「勇者の剣」=インスタンスメソッドなわけだ!僕の誤解を招いた表現その1インスタンスメソッドとはインスタンスを含む変数である。*惜しい、変数ではなくインスタンス自身にくっつくのがインスタンスメソッドそもそもインスタンスって?インスタンス化クラス(クラスがわからない人は下に説明あります!)はnewすると初期化(インスタンスを作成する方法は他にもあるが基本はnew)し、実体化することができます。実体化したものをインスタンスと呼びます。インスタンス変数インスタンスは自身の中に複数の値を所有することができます。始まる名前がインスタンスが所有する変数、インスタンス変数です。インスタンスが持つというニュアンスが大切。新しい型を作る方法(型ってのは設計図みたいなものですね。初心者である私はif~elseの形に慣れ過ぎていた最初は下記のように書いていた。endendもっと簡単にかけるくない?と思いelseを抜いた。params[:title].present?まだまだ綺麗にかけるぞ!と思い、さらに絞り込む。返すということ一瞬はてなマークが頭に浮かぶと思います。簡単にいうと、whereなどのActiveRecord::Relationは同じ型を返し続ける性質があるという。params[:price_lt].present?###3番のゴールは雰囲気はこれと同じ。僕が学習した内容をまとめています。...?こういった疑問についてまとめています。※本記事は、自分で学習したことのまとめ用として書いています。解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。...?『gem』は・・・Rubyのライブラリ(パッケージともいいます)です。『ライブラリ』とは...プログラムの部品で、便利な機能をひとまとめにしたものです。ライブラリを利用することで、自分で1からコードを書くことなく機能を実装することができるので、効率的に開発することが可能です。Admin(管理画面)などがあります。gemを使うことでログイン機能やページネーションといった機能も、簡単に実装可能です。...?『Gemfile』は・・・gemをインストールするための『設計書』のようなもので、基本的にこのGemfileに自分のアプリケーションに必要なgemを記述します。...?『Gemfile.lock』は・・・gemをインストールした後の『ログ、記録』のようなもので、インストールしたgemの一覧とバージョンが記載されています。必要なのか...?gemは、インストールした時期によってバージョンが変わってしまう可能性があるため...例えば、本番環境と開発環境でインストールされるgemのバージョンが異なってしまう可能性があります。・・・Gemfile.lockが使用するgemのバージョンを管理してくれるため、仮にgemがアップデートされても、使用するgemのバージョンは変更させないということが可能になります。updateを使います。updateなどのコマンドが使用できるようになります。gem同士は関連し合っていることが多いので、実際はGemfileに書いてあるgemの他にも、gemが必要になります。そこで・・・Bundlerは、それらも自動でインストールし、Gemfile.lockに記述してくれます。Bundlerは、特定のRailsアプリケーションに必要なgemパッケージをリストアップし、複数のコンピュータ間で簡単に同期が取れるようにするものです。上記の図のように開発者Bさんが、開発者AさんからRailsアプリのソースコードを受け取ったとします。installを実行するだけで、必要なgemをインストールすることができ、簡単に環境を構築できます。install上記を実行すると・・・Railsは、Gemfile.lockを元にgemのインストールを行います。この時...『Gemfile.lockに記述されていなくて、且つGemfileに記述されているgem』がある場合、『該当するgem』と『該当するgemに関連するgem』をインストールした後、Gemfile.lockを更新します。反対に、Gemfile.lockに記述されていれば・・・そこに記述されたgemを見て、それがGemfileの内容に矛盾していない限り、Gemfile.lockの内容に従いインストールします。update上記を実行すると・・・Bundlerは、Gemfileを元にgemのインストールを行い、その後Gemfile.lockを更新します。updateは・・・その言葉通り、gemのバージョンを更新する時に使用します。installコマンドでは、条件に矛盾が生じない限りGemfile.lockに存在するgemに関しては、更新作業を行わないからです。updateは、本番環境で安易に実行しないように注意しましょう。場合によっては、gemのバージョンにズレが発生し、クラッシュする可能性があります。updateは、必ずローカル環境で実行してください。installに関しては・・・Gemfileに新しくgemを記述した際に使用します。