Javaエンジニア、Ruby on Railsでアプリを作る

整理券アプリを作成中です

期間が重複しているかを判定する条件式の導出方法

SQL

開始時間(start_time)と終了時間(end_time)を持つテーブル(例: schedule)で、あるレコードXと時間が重複したデータを抽出するSQLは、 SELECT * FROM schedule WHERE start_time < レコードXのend_time AND end_time > レコードXのstart_time です。 しかしst…

Railsでvalidation中にDBアクセスする場合は、will_save_change_to_#{attr_name}?を使用する

Webアプリでvalidationを書いていると、DBに問い合わせをしなければいけない時があるのですが、その時に、値が変更されているかチェックしてからDB問い合わせした方がよいよというお話です。値が変更されているかは、Railsではwill_save_change_to_#{attr_na…

Railsで変更前の(DBに保存されている)値を利用してvaldiateする

Webアプリでvalidationを書いていると、DBに保存されている値が必要になる場合があります。Railsでは、DBに保存されている値は、#{attr_name}_in_database、保存されている値から変更があったかは、will_save_change_to_#{attr_name}?というメソッドが用意さ…

Railsで値が変更されているか調べてvaldiateする

Webアプリでvalidationを書いていると、値が変更になった時にだけvalidationをかけたい場合があります。Railsではwill_save_change_to_#{attr_name}?というメソッドが用意されています。#{attr_name}の部分はModelの属性(カラム名)で置き換えます。 値が変更…

Rubyで全角空白も対象としたstrip(trim)

rubyではtrimじゃなくてstripというそうです。 stripは先頭と末尾の半角空白やタブ、改行などを除去するメソッドです。 全角空白は除去されないので、独自で定義する必要があります。 うまくいく例 class String def strip_all_space! gsub!(/(^[[:space:]]+…

「オブジェクト指向とは何か」の答えが『なぜ、あなたの仕事は終わらないのか(中島聡[著])』に書いてあったので紹介します

オブジェクト指向とは 『なぜ、あなたの仕事は終わらないのか(中島聡[著])』には以下のように書いてあります。 なんらかの対象(オブジェクト)を先に選択したうえで動作を指定することをオブジェクト指向といいます。 考えてみる Wikipediaでオブジェクト指…

複数行の式とRubyMineのフォーマッタとの相性が悪いのでIssueをあげました

こちらの記事を書いてる最中に、複数行の式とRubyMineのフォーマッタの相性が悪いと気づきました。 yucatio.hatenablog.com 算術オペレータを最後に置いて改行する場合 算術オペレータを最後に置く方法だと、フォーマットをかけた際に、RubyMineは4個のスペ…

Rubyでは、式の途中で改行するときは、算術オペレータを一番後ろに置いてから改行する

Javaの人間がRubyでやってしまった失敗を1つ紹介します。 意図した通りに動かないコード こんなコードを書きました sum = 100 + 200 + 300 + 400 puts sum #=> 300 100+200+300+400 (=10000)のつもりで書いていましたが、最初の2つしか足されていません。 デ…

Rubyでは、メソッド引数のカッコはメソッド名の直後に書くこと。空白を入れちゃだめ

引き続き、『プロを目指す人のためのRuby入門』(伊藤淳一[著])を読んでいます。 問題発生 本の中のコードを(間違って)写して、下記を実行したところ、 class DeepFreezableTest < Minitest::Test def test_deep_freeze_to_hash # ハッシュの値は正しいか ass…

RubyMineでminitestを実行する

今、『プロを目指す人のためのRuby入門』(伊藤淳一[著])を読んでるんですが、使用するテストフレームワークminitestなのですよね。 RubyMineでminitestを追加しようとしたら、”New”の一覧にもないし、とりあえず手動でファイル作って require 'minitest/auto…

リソースにfirstとかlastとかtodayでアクセスしたい場合のリンクパスの生成方法 (Ruby on Rails)

railsでリンクパスを作成するときに、 events/123/tickets/1 のようにIDを指定するのではなく、 events/123/tickets/last のlastように、 リソースパスに文字列を指定する方法。 うまくいく方法 シンボルを渡せばよいだけでした。 event_ticket_path(@event,…

RubyでArrayをHashに変換する

前回の記事で、ArrayをHashに変換するのにArray#mapとArray#to_hを使用して、ArrayをHashに変換しました。 yucatio.hatenablog.com オブジェクトの配列を、オブジェクトのIDをハッシュのキー、オブジェクト自身をハッシュのバリューとして登録したい場合があ…

Railsでajax通信時にattribute名とfull_messageの組み合わせでレスポンスを返す

ajaxでの非同期通信時に、attributeごとのメッセージを表示するのに手間取ったので記録しておきます。 ajax通信でない時は、errors.full_messages_for(:attribute_name)で各attributeのエラーメッセージは取得できます。 やりたいこと ajax通信時に、入力エ…

RubyMineでRuby on railsの開発をする その8: おすすめ設定3つ

ナビゲーションバーの表示 現在開いているファイルの階層をウィンドウ上部に表示させます。 View > Nabigation Bar を選択 画面上部に awesome_events > app >views > events > new.html.slim と、現在開いているファイルの階層が表示されるようになりました…

RubyMineでRuby on railsの開発をする その7: ER図の出力

RubyMineでのERDの出力方法です。引き続き、"パーフェクト Ruby on Rails" に掲載されているサンプルアプリ (awesome_events)を使用していきます。 DBの設定が事前に必要です。 yucatio.hatenablog.com DBを右クック > Diagrams > Show Visualization... を…

RubyMineでRuby on railsの開発をする その6: DB (Sqlite) の設定

RubyMineでのSqliteの設定方法です。引き続き、"パーフェクト Ruby on Rails" に掲載されているサンプルアプリ (awesome_events)を使用していきます。 yucatio.hatenablog.com Sqliteの設定 View > Tool Windows > Database を開く。 Databaseウィンドウが開…

RubyMineでRuby on railsの開発をする その5: rspecの実行

引き続き、"パーフェクト Ruby on Rails" に掲載されているサンプルアプリ (awesome_events)のテストをRubyMineで行なっていきます。 yucatio.hatenablog.com rspec-railsがインストールされていることが前提となります。 rspec install の実行 rspecをinsta…

RubyMineでRuby on railsの開発をする その3: rails generate controller

前回に引き続き、"パーフェクトRuby on Rails" に掲載されているサンプルアプリ (awesome_events)の開発をRubyMineで行なっていきます。 yucatio.hatenablog.com rails generate controller controllerを作成します。 プロジェクト名を右クリック > New > Ru…

RubyMineでRuby on railsの開発をする その4: rails generate model と db:migrate

前回に引き続き、"パーフェクト Ruby on Rails" に掲載されているサンプルアプリ (awesome_events)の開発をRubyMineで行なっていきます。 yucatio.hatenablog.com rails generate model controller と同様、 プロジェクト名を右クリック > New > Run Rails G…

RubyMineでRuby on railsの開発をする その2: bundle install の実行

前回の記事で、railsのプロジェクトフォルダの作成(rails new)を行うことができました。 yucatio.hatenablog.com さっそく自分のアプリを作るぞ、と思いましたが、新しいことを一気に始めると混乱するので、まずはRubyMineを使用して、"パーフェクトRuby on …

RubyMineでRuby on railsの開発をする その1: RubyMineインストールとプロジェクトの作成

JavaからRubyにきて困ったことの1つは、無料のIDEが無いことです。eclipseの便利さになれきった自分には、vimのカスタマイズがおっくうに感じられてしまいました。コマンドラインでいちいちrailsのコマンド入力するのも面倒。 (でもこの、面倒って思う気持ち…

頭の体操[初級] 連続したフィールドの入力で、途中の未入力欄を検知 (Ruby編)

前回の記事の続きです。 yucatio.hatenablog.com 入力の途中で空欄があったらエラーメッセージを表示する機能を実装します。 実装してみよう サンプルとして、以下のようなメソッドを作成します。 引数にStringの配列を受け取る 配列の途中に空文字があり、…

頭の体操[初級] 連続したフィールドの入力で、途中の未入力欄を検知 (Java編)

以前に、仕事で以下のような挙動をする処理を書く必要がありました(正確には、後輩が実装して自分はレビュー担当)。連続して値を入れるような入力欄で、途中で入力が空になっている場所を検知します。 実装してみよう サンプルとして、以下のようなメソッド…

Rubyでクラス宣言直下に書かれたメソッドの実行時期

Railsのスコープ定義文を見ていたら、クラス宣言直下に書かれたメソッドはいつ実行されるのかという疑問がわいてきたので調べました。 Rubyはクラス宣言直下に任意の式が書ける railsのコードでは、クラス宣言直下でscopeメソッドを呼び出しています。 class…

"初めてのRuby" 本の感想とRubyの印象

Ruby on Railsを勉強する前に、"初めてのRuby"を読みました。本の感想とRubyの印象を書きます。 自身のプログラミング言語経験 本の内容が専門的なので、参考に自身のプログラム経験を書いておきます。 業務で主に使用している言語 Java (業務で使用して6年…

Rubyでの動的なクラスメソッドの追加方法

メソッドの実行でクラスメソッドが追加される 以下はrailsのscope定義文です。このように書くと、Book.scopeでレコードが取得できます。 メソッド呼び出しでメソッドが動的に追加されます。 メソッドの引数が新しいメソッドのメソッド名になるのです。不思議…

Ruby初心者 AcriveRecordのscope定義式の意味を理解する

Ruby on Railsの環境構築が終わったので、"パーフェクト Ruby on Rails"に載っていサンプルアプリを作っていきます。 プロジェクトの作成とモデルの作成 rails new プロジェクト名 で新しいプロジェクトを作成します。本のサンプルに従って、プロジェクト名…

Railsのインストール

Rubyのバージョンアップ、bundlerのインストールも終わったのでRailsのインストールをします。 インストールするRailsのバージョン決定 参考にしている" パーフェクトRuby on Rails" では、Rubyのバージョン2.1.2とRailsバージョン4.1.1を利用していますがな…

bundlerのインストールと初期設定

Rubyを無事インストールできたので、次はbundlerをインストールします yucatio.hatenablog.com パッケージ管理とは パッケージ管理とは、使用するライブラリ(ある機能のソースファイルの集まり)をインストール、更新するための機能です。 Rubyではgemコマ…

make実行時にerror: invalid instruction mnemonic 'adoxq' が発生した原因

開発環境 OS : Mac OS X バージョン 10.8.4 症状 make実行時にerror: invalid instruction mnemonic 'adcxq' が出る。 下記ログは、rubyのバージョンアップ時にopensslをインストールしており、そのなかでmakeが実行されているもの。 $ rbenv install 2.3.1 …