Ruby on Rails
railsにもインターフェースはないのかな?と思い調べてみると、 ポリモーフィック関連というものを使うそうです。 例として、Article、Eventという二つのモデルを用意し、 その両方ともにCommentモデルをhas_manyの関係で保持させたいとします。 テーブル定…
はじめに Railsでは便利なログイン機能を実装してくれるdeviseやsorceryといったgemが存在します。 導入するだけでsign_inやsign_outといったログインに必要なメソッドを自動的に生成してくれますが、 カスタマイズをする場合には、内部のソースを解読する必…
railsでpost送信を行う際に、画面を経由しないリクエストには422が返却される。 これはrailsのCSRF対策である、ActionController::Base.allow_forgery_protectionがtrueになり、ApplicationControllerの protect_from_forgery with: :exceptionで、CSRFチェ…
ifを使用した条件分岐 例えば、bという項目がtrueの場合のみaの値は必須にしたい、とかあると思う。 with_optionsメソッドを使用して以下のように実装することができる。 class Post < ActiveRecord::Base # ifオプションで条件に合致する場合のみvalidates…
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, "…
Gemのインストール Gemfileに以下を追加し、bundle installを実行する。 RSpecを使用することを前提に書くのでRSpecも一緒にインストールしておく。 group :development, :test do gem 'rspec-rails' gem 'factory_girl_rails' end bundle install後にrspec…
Railsでjsonを返却するAPIを作成するには、Jbuilderが良さそう。 まずはモデル作成 rails g scaffold Product name:string price:integer category_id:integer API用のルーティング設定 config/routes.rbをいじり、API用のルーティングを設定する。 APIには…
Railsでデータにタグ付けさせる昨日の実装方法について調べた。 acts-as-taggable-onというGemを使えば良さそう。 インストール まずはbundle installでGemをいれる。 gem 'acts-as-taggable-on', '~> 3.4' タグ付けに必要なテーブルを作成。 tomy2002:~/wor…
アンインストール方法。 tommy1218:~/workspace $ bundle exec gem uninstall アンインストール対象のGem あとは、GemfileからアンインストールしたGemを削除すればOK。
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に記入したらインストール…
データベース登録サンプル。 * saveメソッド:登録成功時にtrue、失敗時にfalseを返却する。 * save!メソッド:登録失敗時に例外を返却する。 普通に登録する分にはsaveメソッドで問題ないが、 他テーブルも兼ねたトランザクションでのロールバックをする場…
i18nを使用して他言語化する方法を調べた。 デフォルトロケールの設定 config/application.rb内に、以下の1行を追記。 config.i18n.default_locale = :ja 各ロケールの辞書の設定 config/locales/内に、各ロケールのyamlファイルを作成。 日本語ならば、conf…
新規にテーブル作成する場合 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で、テーブル構成を変更するたびに作成するマイグレーションファイルが増加しまくるので、 何か良い方法はないか調査した。 二つみつけた。Squasherが手軽な感じがする。 Squasherを使ってまとめる方法 お手軽なやつ。ただしdry runは対応していない模…
Ajax通信でハマったのでメモ。 ちなみにrailsなら :remote => true にしておけばjsにajax処理書かなくても問題ない。 (その代わり.js.erbが必要か。) 他の言語でもやることを想定してメモしておく。 通信方法 ボタン押した時にAjaxでデータ取ってくるみたい…
railsにはリソースベースのルーティングで、 index, new, create, show, edit, update, destroyが用意されている。 resources :posts 独自のアクションをルーティングに追加する方法 # これだとposts/:id(hogehoge)とみなされる get 'posts/hogehoge' => 'po…
Railsでテーブル作成後、seedsファイルを使用したデータの登録手順を記載する。 1.seedsファイルにseed対象のファイルを追加 seedsファイルに直接テーブルの作成ロジックを記載しても問題ないが、 テーブルの数が多くなった時に管理が煩雑になるので、テーブ…
以下に、gemを使用したrailsへのbootstrapの導入方法を記載する。 1.Gemの導入 以下のGemをGemfileに記載する。 gem 'twitter-bootstrap-rails' # bootstrapはlessで記述されているのでless-railsが必要 gem 'less-rails' # 同様に、less-railsの導入にrubyr…