じぶんメモ

プログラミングのメモ、日常のメモとか。

Ruby on Rails

railsでポリモーフィック関連でインターフェースっぽく振る舞わせる

railsにもインターフェースはないのかな?と思い調べてみると、 ポリモーフィック関連というものを使うそうです。 例として、Article、Eventという二つのモデルを用意し、 その両方ともにCommentモデルをhas_manyの関係で保持させたいとします。 テーブル定…

Railsでgemなしでログイン機能を実装

はじめに Railsでは便利なログイン機能を実装してくれるdeviseやsorceryといったgemが存在します。 導入するだけでsign_inやsign_outといったログインに必要なメソッドを自動的に生成してくれますが、 カスタマイズをする場合には、内部のソースを解読する必…

rspec内でCSFR対策を有効にする

railsでpost送信を行う際に、画面を経由しないリクエストには422が返却される。 これはrailsのCSRF対策である、ActionController::Base.allow_forgery_protectionがtrueになり、ApplicationControllerの protect_from_forgery with: :exceptionで、CSRFチェ…

railsのモデルに、特定の条件下で動くvalidationを追加

ifを使用した条件分岐 例えば、bという項目がtrueの場合のみaの値は必須にしたい、とかあると思う。 with_optionsメソッドを使用して以下のように実装することができる。 class Post < ActiveRecord::Base # ifオプションで条件に合致する場合のみvalidates…

railsでenumを使う

modelに記述する。 class Post < ActiveRecord::Base enum status: { created: 0, drafted: 1, canceled: 2 } end こうすることで、Post.statusesとして、各Enumにアクセスすることができる。 pry(main)> Post.statuses # => {"created"=>0, "drafted"=>1, "…

FactoryGirlを使用したデータの作成

Gemのインストール Gemfileに以下を追加し、bundle installを実行する。 RSpecを使用することを前提に書くのでRSpecも一緒にインストールしておく。 group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end bundle install後にrspec…

Railsでjsonを返却するAPIを作成する。

Railsでjsonを返却するAPIを作成するには、Jbuilderが良さそう。 まずはモデル作成 rails g scaffold Product name:string price:integer category_id:integer API用のルーティング設定 config/routes.rbをいじり、API用のルーティングを設定する。 APIには…

Railsでタグ機能を実装する。

Railsでデータにタグ付けさせる昨日の実装方法について調べた。 acts-as-taggable-onというGemを使えば良さそう。 インストール まずはbundle installでGemをいれる。 gem 'acts-as-taggable-on', '~> 3.4' タグ付けに必要なテーブルを作成。 tomy2002:~/wor…

使わなくなったGemをアンインストールする

アンインストール方法。 tommy1218:~/workspace $ bundle exec gem uninstall アンインストール対象のGem あとは、GemfileからアンインストールしたGemを削除すればOK。

Railsにtwitter bootswatchを導入する

Railsにbootswatchを導入する際にはまったのでメモ。 導入方法 gem 'twitter-bootswatch-rails-helpers', '~> 3.2.0.0' gem 'twitter-bootswatch-rails', '~> 3.2.0' # bootswatch適用に必要 gem 'less-rails' gem 'execs' Gem fileに記入したらインストール…

Railsでデータベースへの登録あれこれ

データベース登録サンプル。 * saveメソッド:登録成功時にtrue、失敗時にfalseを返却する。 * save!メソッド:登録失敗時に例外を返却する。 普通に登録する分にはsaveメソッドで問題ないが、 他テーブルも兼ねたトランザクションでのロールバックをする場…

Railsでi18nを使用して他言語化に対応する

i18nを使用して他言語化する方法を調べた。 デフォルトロケールの設定 config/application.rb内に、以下の1行を追記。 config.i18n.default_locale = :ja 各ロケールの辞書の設定 config/locales/内に、各ロケールのyamlファイルを作成。 日本語ならば、conf…

Rails4のマイグレーションの書き方

新規にテーブル作成する場合 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.column :email, :string, null: false t.index :email end end end カラムの追加や削除を行う場合 changeメソッドを使用する。 changeメ…

Railsのマイグレーションファイルをまとめる

Railsで、テーブル構成を変更するたびに作成するマイグレーションファイルが増加しまくるので、 何か良い方法はないか調査した。 二つみつけた。Squasherが手軽な感じがする。 Squasherを使ってまとめる方法 お手軽なやつ。ただしdry runは対応していない模…

jQueryを使用したAjax通信

Ajax通信でハマったのでメモ。 ちなみにrailsなら :remote => true にしておけばjsにajax処理書かなくても問題ない。 (その代わり.js.erbが必要か。) 他の言語でもやることを想定してメモしておく。 通信方法 ボタン押した時にAjaxでデータ取ってくるみたい…

Railsで独自のアクションをルーティングに加える

railsにはリソースベースのルーティングで、 index, new, create, show, edit, update, destroyが用意されている。 resources :posts 独自のアクションをルーティングに追加する方法 # これだとposts/:id(hogehoge)とみなされる get 'posts/hogehoge' => 'po…

seedsを使ったテーブルへのデータINSERT

Railsでテーブル作成後、seedsファイルを使用したデータの登録手順を記載する。 1.seedsファイルにseed対象のファイルを追加 seedsファイルに直接テーブルの作成ロジックを記載しても問題ないが、 テーブルの数が多くなった時に管理が煩雑になるので、テーブ…

railsにbootstrapを導入する

以下に、gemを使用したrailsへのbootstrapの導入方法を記載する。 1.Gemの導入 以下のGemをGemfileに記載する。 gem 'twitter-bootstrap-rails' # bootstrapはlessで記述されているのでless-railsが必要 gem 'less-rails' # 同様に、less-railsの導入にrubyr…