箱のプログラミング日記。

渋谷の自社開発企業でRails書いてます。

fields_forを使った子モデルへの複数レコード保存【cocoonが便利】

Railsで商品予約システムを開発中です。 あるオブジェクトをcreateする際に、一部の情報だけ別モデル(子モデル)へ保存したい時って頻繁にあると思いますが そこに非同期(JavaScript)によるフォームの出現を組み合わせた、最高に便利なgemに出会いました…

「ログアウトしてよろしいですか?」のアラートを出したい【Rails】

Railsでdeviseを使ってアプリを作成しています。 ユーザーがログインやログアウトした際に「ログインしました」「ログアウトしました」というフラッシュメッセージを出すのは比較的簡単ですが、 例えばログアウトボタンを押したら「ログアウトしてよろしいで…

railsで管理者権限を付与したい【rails_admin】

Railsで商品予約サイトを作成しています。 ユーザー機能はdeviseで実装し、権限によってできる処理を分けたかったので adminを使用しました。 主に使用するモデルとしては product(商品) user(顧客) order(注文) といった感じです。 今回、通常ユーザ…

date_selectの使い方【Rails】

form_forやform_withの中で使えるヘルパーメソッドで よく見る日付や時刻をプルダウンで選択できるフォームを簡単に作ることができる、 date_selectを使用してみました。 こんな感じ。 コードは以下(form_forは省略) = f.date_select :date, {include_blan…

フラッシュメッセージの作り方【Rails】

フラッシュメッセージとは 「登録が完了しました」「削除が完了しました」というように 正常な動作ができていることをユーザーに知らせるためのメッセージのこと。 Railsではリダイレクトとともに使われることが多いように思います フラッシュメッセージの表…

Railsのエラーメッセージを好きなものに変更【バリデーション】

バリデーションとは validate・・・検証する ユーザーがフォームに値を入力してsubmitする時などに制限をかけること。 例)入力必須、◯文字以下など 基本的な書き方 対象モデルに書く。 validates :カラム名, 条件 空じゃないかどうかを検証 class Post < Ap…

enumの使い方【Rails】

enumとは railsの場合は標準機能としてモデルに記述することで使うことができる。 セレクトボックスから選ばせた値をDBに保存する時などに便利 わざわざDBにテーブルを作って保存しておくほどではない静的なデータも ユーザーに任意の値を入力させたり、いく…

カラムにreferencesの指定ができない【MySQL文法エラー】

カラムに外部キー制約をつけようとしたところうまくいかなかったので、 解決方法を残しておこうと思います。 実現したかったこと postテーブルを作成後、複数のカラムを追加 その際、外部キー制約を設定するカラムが含まれていたが、エラーになる テーブルは…

Railsの命名規則【単数形・複数形】

基本原則 コントローラー・・・複数形 モデル・・・単数形、先頭大文字 で作成すると言うのはおなじみ。 $ rails g controller users $ rails g model User 複数の単語を繋げたい場合 コントローラーの場合はアンダーバーで繋げる モデルは大文字で繋げる $ …

prefixでidを複数持たせる方法【ルーティング】

今まで何となくしか理解できていなかったルーティングですが、 自分でアプリケーションを作るようになるとそういうわけにもいかず。 きちんと勉強しまくったところ、深いところまで知ることができたので きちんと残しておこうと思います。 固有のアクション…

carrierwaveで複数画像投稿【Rails】

レビューサイト作成にあたり画像の複数投稿を実装したので carrierwaveの使い方を買いておこうと思います。 ①gemをインストール gem 'carrierwave' gem 'mini_magick' $ bundle install 今回はmini_magickを使って画像の加工(リサイズなど)も実現したいの…

Mechanizeでスクレイピング【Rails】

Mechanizeというgemを使用してスクレイピング(外部サイトから情報を取得する)を行う手順を書いていきます。 ①Mechanizeをインストール gem 'mechanize' $ bundle install ②model配下にscraping.rbを作成 今回はスクレイピングで取ってきた要素をデータベー…

GitHubでリポジトリの作成とアプリケーションの開発

新しくアプリケーションを作る時に、同じく新しくGitHubのリポジトリを作ることになると思います。 おそらく慣れてしまえばブログに残すほどのことでも無いかもしれませんが、 現段階ではまだ数回しかリポジトリの作成をしておらず、今後流れが分からなくな…

link_toと仲良くなりたい

link_toに死ぬほど苦しめられた私。 仲良くなるためにきちんと向き合って勉強してみました。 link_toとは Railsのヘルパーの一つ。HTMLで言うaタグに当たる。 その名の通り、どこかにリンクを飛ばしたい時に使うことができる。 Railsでは、HTMLのタグを使う…

form_forの書き方・使い方

form_forがなかなか理解できず、いつもコピペでしたが ついにしっかり理解しなきゃいけない日が来たので、ざっと調べてみました。 form_forの基本構文 <%= form_for(@article) do |f| %> ~~中身~~ <% end %> form_forはRailsのヘルパーのひとつで、 HTMLで言…

Railsでアプリケーションを作る【最初の作業】

まだ初心者ですが、Railsで簡単なアプリケーションを作れるくらいのレベルにはなったので、 多分初学者がつまづきやすい(というか忘れがちな) 「アプリケーションを作るときの最初の第一歩」をまとめておこうと思います。 ※RubyやRailsの開発環境が整って…

部分テンプレートとrenderの使い方

renderとは 部分テンプレート化する時に使える。 複数のページで共通して使われるレイアウト部分がある場合、 そのhtmlを各ファイルでいちいち記述するのは面倒臭いし、美しくない。 そこで、その共通部分を抜き出し、独立したファイルとして作成し、 それを…

モデルに書くゲッターの使いどころ

まだRubyとRailsの学習を初めて3週間程度の初学者ですが、 今日「初学者ならではの目線」である疑問が浮かびました。 def review_average reviews.average(:rate).round end 何かの値を返してくれるだけのために定義するメソッドをゲッターと呼びますが、 …

N+1問題とは

N+1問題について、なかなか理解できなかったのですが 今日やっと理解できたので、残しておきたいと思います。 N+1問題はデータベースの話 N+1問題は「includes」によって解消できる 「includes」はモデルに対して使うメソッド コントローラーのアクション内…

form_tagの基本構造と使い方

form_tagの基本構造と記述の仕方について、使い方をよく理解していなかったのでまとめました。 form_tagとは railsでアプリケーションを作成する際のヘルパーメソッドで、 HTMLで投稿フォームを作成するよりも簡単に作ることができ、 セキュリティ面でもform…

よくあるRailsのエラーとその対処法

よくあるエラーとその対処法についてまとめました。 syntax error No Method Error Pending migration error Temolate is missing Routing Error 以下、それぞれのエラーの内容と対処法です。 エラーっぽく赤で表示していきます笑 1.syntax error 意味 Ruby…

devise導入方法

deviseのインストールからモデル生成までの流れをまとめました。 Gemファイルに「gem 'devise'」と追記 $ bundle install $ rails g devise:install $ rails g devise:views $ rails g devise モデル名 $rake db:migrate サーバーの再起動 1.Gemファイルに「…

マイグレーションファイルの作成・実行

新しくテーブルを作りたい railsでのアプリケーション開発に当たって、新しくテーブルを作成したい時は、以下の手順で行う。 ①モデルの作成(≒テーブルの作成) ②生成されたマイグレーションファイルの編集 ③マイグレーションの実行 ①ターミナルから以下のコ…

deviseとかgemって何だろう

deviseとは? deviseとは、railsによるアプリケーション開発を楽にしてくれるGemの一種。 Gemというのはrailsでの開発を楽にしてくれるソフトウェアたちのことを指す。 インストールすると使えて、オープンソース(=誰でも使える)。 railsを使う人たちが作…