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

えんじにあ奮闘記

Ralisで入力確認用フォームを作りたい【_confirmation】

サービスを作っていると「パスワードやメールアドレスの確認用入力フォームを作りたいな〜」みたいな時ありますよね。 イメージこんな感じ。 (パスワードだったらユーザー認証のライブラリがだいたいやってくれてるような気もしますが。。) Rails標準のヘ…

Railsのスコープの書き方【SQL】

スコープって何?状態だったところから、使ってみると非常に便利だったのでスコープについて書いておきます。 ちなみにここで言うスコープはメソッドのスコープとかではなく、SQLとのデータのやりとりを簡潔にまとめるときに便利な方のスコープさんです。 ス…

assign_attributesなのに保存されてしまう

Railsでのアプリケーション開発で「DBに保存したくないけど値を更新したい」時ってあると思いますが、そんな時に便利なassign_attributesで少し詰まったのでメモ。 update_attributesとassign_attributesの違い update_attributesとassign_attributesの違い…

uniqueness: trueでnillを許可したい【Rails】

DBに保存する前に一意かどうかを検証したい場合、バリデーションで uniqueness: true を使うと思いますが、presence: trueを併用しない場合(値がなくても良い場合)に少しつまづきました。 今回の問題 validates :hoge_code, uniqueness: true このままだと…

referencesのカラムを後から追加・削除【Rails】

references型のカラムを後から追加したり削除したりしたい時にちょっとつまづいた話。 まずモデルの説明から 今回はuserモデルとgroupモデルがあり、中間テーブルはgroup_user。 あるグループを作成する時に複数userを選択しますが、 groupsテーブルにはグル…

中間テーブルへの保存ができないのはseedが原因かも【Rails】

中間テーブルへの保存ができなくて、一生懸命コードのいろんなところを探して調べたりしたけど、結局DBが原因でしたよという話。 まずモデルの説明から 今回はuserモデルとgroupモデルがあり、中間テーブルはgroup_user。 あるグループを作成する時に複数use…

data-confirmに苦労した話【Rails】

業務で削除前に「本当に削除してよろしいですか?」的な確認ダイアログを作りたくて、 意気揚々とdata-confirmを使ったのは良いものの、まさかのところでハマってしまった記録。 そもそもdata-confirmとは HTML5から使えるようになったもので、railsではaタ…

Proc.newでバリデーションに複数条件を指定【Rails】

バリデーションに複数条件を指定したい タイトルの通り。 Railsではデータの入力漏れをユーザー側に知らせる手段としてバリデーションが用いられますが、条件によって処理を分けたい場合も当然出て来ますよね。 例えば私がスクールでやったメ◯カリで言うと、…

include ActiveModel::Modelとは【Rails】

仕事で開発をしていたところ、 「include ActiveModel::Model」というコードが出現しました。 これまで個人開発やスクールでの学習では 「モジュール」をあまりやってこなかったので こういう見たことがないものには、苦手意識・・・。 ということで、調べて…

ぼっち演算子とpresence【Rails】

業務に入ってから、「エラーハンドリング」の重要性をひしひしと感じています。 やっぱりイチ企業のサービスとなると、エラーが起こっては困るので コードの至る所に対処が散りばめられているんですね。。 ポートフォリオなんかでなんとなくやっていたのとは…

出来るだけCUIでアプリを作ろう

来月から都内でエンジニアとして働くことになりました。 これまでポートフォリオだったり、スクールのカリキュラム内でアプリをつくる時は 「自分が知っていて慣れているやり方」に偏ってしまうことが多かったのですが、 今後エンジニアになる以上、 「もっ…

create前に確認画面を作りたい【Rails】

Railsで商品予約システムを開発しています。 巷のアプリとかでもよくある「この内容でよろしいですか?」みたいな確認画面を newとcreateの間に挟みたいな・・・と思いつきました。 主なモデルは以下 ユーザー:user 商品:product 注文:order 先に、参考に…

railsをherokuでデプロイ【アセットパイプラインが通らない】

今日、ポートフォリオをデプロイしました。 作成中ではあるもののアジャイル型で・・・ということで。 デプロイに関してはほぼ未経験。 スクールのチーム開発では、デプロイ担当さんが大変そうにやってるのを ふーん・・・って聞いているのが精一杯でした ※…

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を各ファイルでいちいち記述するのは面倒臭いし、美しくない。 そこで、その共通部分を抜き出し、独立したファイルとして作成し、 それを…