Red > Green > Refactor > Red

cycle is based on desire

Rails

warning: circular argument reference

【追記】 よいまとめはこっち ↓ ruby2.2.0ではメソッドの引数のデフォルト値に同じ名前の変数を使えない - Qiitaqiita.com v2.1.6 > v2.2.2 の移行より 分かったこと test.rb 1 class SomeClass 2 attr_reader :text 3 4 def initialize 5 @text = 'test rea…

delayed_job rails

Delayed Job Best Practiceswww.sitepoint.com

Gemfile の グループ化, 明確にしないと予期せぬエラーが起きる (書き留め)

Gemfile のグループ化は明確にしよう、という話 お題のGemfile source 'https://rubygems.org' gem 'rails', '~> 4.2' gem 'sqlite3' gem 'coffee-rails', '~> 4.0.0' gem 'haml' gem 'jbuilder', '~> 2.0' gem 'jquery-rails' gem 'faraday' gem 'rails_con…

serve_static_assets has been deprecated in Rails 4.2

delete line config.serve_static_assets = true at config/environments/production.rb and config/environments/test.rb from https://github.com/heroku/rails_serve_static_assets/issues/11

I18n.t の翻訳言語を明示的に変更する

目的 表題を Rails app で実現する 前提 app のデフォルト言語は ja になっている config/application.rb 16 module Sampapp 17 class Application < Rails::Application 18 config.i18n.default_locale = :ja 19 end 20 end locales/*.yml に各言語の文言が…

覚え書き -- Rails から呼び出した Gem で Rails.root を使えるようにする

目的 Rails から呼び出した Gem で Rails.root を使えるようにすること (以下の条件での対応方法は、結論、Gemfile で gem 'some_gem', require: false すること である) 目的のイメージ Given {Rails root}/Gemfile gem 'my_gem', path: 'lib/my_gem' {Rail…

controller における concern の書き方 ; Rails

先ず concern とは? 機能を集約する手段 (今回は ApplicationController によく書かれる session_required を concerns ディレクトリ下のモジュールに集約する) controller の「一機能」を concerns のモジュールとして集約する app/controllers/concerns/se…

Model に散らばる validates メソッドを concern で集約する

よくある事例 validates だけで 10 行ぐらいクラスを食いつぶす app/models/book.rb class Book < ActiveRecord::Base validates_presence_of :name, :password ... validates_length_of :title, max ... validates_foo validates_bar validates_qux . . . v…

foreman ; gem

Rails で、WEBRick でも、thin でも、「同じプロセス上でサーバーを 2 つ以上起動すること」は愚直にできない Terminator などで画面上の細工はできるが、GUI に限った話 gem を使う(多様な gem があって驚嘆の限り) Gemfile $ gem 'foreman' RAILS_ROOT/Pro…

https アクセス(自己署名証明書) ; Rails

継続遷移には材料不足ではあるが、ものを揃えるだけならば thin で SSL 通信用のサーバーを立てる SSL 通信をさせたいコントローラ(もしくはアクション)に ssl_force を噛ませる 前提 http://mat5ukawa.hateblo.jp/entry/2014/02/28/005347 で自己署名証明書…

リファラバック # Rails

勝手な造語なので、正確な用語があればどなたか教えてください。 gem 使うのかなと思ったけど、 raw code で何とかやれそう↓ 目的 或るページへは特定のページから遷移していないと NG な処理を実行すること ついでに、F5 再読み込みも禁止する top/index =>…

Integration test の Failed assertion, no message given への対応; Rails

Ruby で Integration テストしていた(ruby -Itest test/model/*.rb) assert のテスト失敗時、常にFailed assertion, no message given. と表示された。一概には言えないが、一つの、原因と対策 一つの原因 assert の第二引数に「エラーメッセージ」が渡され…

gem dalli ; Rails

メモリキャッシュシステム。 使いようによっては session 以上の代用が出来る 設計とは相談。negotiate 目的 CentOS, Rails を使って memcache を devlop 環境で Controller に埋め込めるようになる。 準備 環境導入 sudo yum install memcached memcached …

plugin 構築 ; Rails 4

暫定版 Rails 4 でプラグイン、ってのはどう構築するのか知る必要があった gem と切り分けができてない ゴール Rails 4 環境に plugin を導入する プラグイン開発はローカルのみにし、gem にしたり云々はしない ハッシュが method_missing したときに 'f' * …

capybara-webkit 用の環境を CentOS 6.5 に導入する ; Rails

Rails というより Linuxの環境構築 ゴール CentOS 6.5 に capybara-webkit の環境を構築すること 導入に当たって起きた問題点 https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit にある CentOS 6.4 の導入を…

テーブル論理削除 gem acts_as_paranoid

rails 4 に対応している gem の目的 テーブルデータを物理削除ではなく論理削除する。 データ自体が完全に消えては困るが、表向きには消去されていてほしいときに使う。 Gemfileの記述 gem 'rails4_acts_as_paranoid' 論理削除確認までの手順 (books テーブ…

直接 SQL を叩く ; Rails

Rails で SQL 直書き処理をさせる方法 1-0. 方法 1-1. 正常系返り値のオブジェクト 1-2. 異常系の挙動 方法 ActiveRecord::Base.connection.execute("SQL文") でいける。 ex. ActiveRecord::Base.connection.execute("SELECT * FROM rankings;") 正常系 処理…

Rails ; Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock

Rails で DBMS を MySQL にして、rake db:migrate などをしたときに Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' が出たときの原因と対策 原因 MySQL サーバーが立ち上がっていない 対策 MySQL サーバーを立ち上げる C…

net/http で Rails application の動作チェックをする ; POST

rb ファイルを使って Rails app に POST した時の挙動をチェックする セキュリティ的にズル抜けなので、参考になる部分は薄いと断言 前提条件 rails g scaffold name:string email:string password:string rake db:migrate がされている。 次のレコードも用…

net/http で Rails application の動作チェックをする ; GET

前々から気になっていたので やろうとすること rails g scaffold user name:string email:string rake db:migrate している状態で、 GET /users の response code をチェックすること。 方法 rb ファイルに以下のソースを書く。実行する。 get.rb require 'n…

mass assignment と strong parameters

私なりの解釈 mass assignment #=> assign すべきではない物もしてしまう仕組み及び方法 strong parameters #=> mass assignment を防ぐ手段 以下、詳しく 前置き 例えば User モデル(権限つき)の attribute が次の通りであるとする name:string, email:stri…

権限管理 gem ; cancan

Devise に次いでの衝撃 Devise が認証機能を持たせる gem に対して、 cancan は認証後の権限を管理する gem 最終的にやること cancan を用いて 登録 email 権限ごとに挙動 を変化させること 前提条件 rails g devise user からの流れで ユーザー1 matsu@mats…

Devise gem ; email を sign up に使わない方法は

先ず無い 引用元 https://github.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-sign-in-with-something-other-than-their-email-address Important note: remember that even if you don’t want to sign in using email, you must have email in…

Devise gem で email もしくは 他の項目 を使って sign in をする方法(sign in 以外もいくつか)

今回は ドキュメントに倣って項目を username にする 分類: 準備 Devise 用設定ファイルの作成 $ rails g devise:install =============================================================================== Some setup you must do manually if you haven'…

devise gem との馴れ初め(動作チェック)(sign upできるまで)

*. gem 'devise' rails 4系 は対応済だと *. rails g devise:install devise の設定ファイル(2つ)をインストしてくれる *. rails g devise (devise用新規 Model もしくは devise を適用したい既存のModel) よく使われるらしい User を Model にしておく (既…

Gon gem ; controller と app/assets/javascript/*.js.coffee を結ぶ

Controller => app/assets/javascript/*.js.coffee の流れ(厳密には違うけど)で、コントローラーで設定した値を CoffeeScript に渡すことができる。 Gemfile gem 'gon' app/views/layouts/application.html.erb <%= include_gon %> # <= #### インクルードゴ…

Rails routing ; concern

concern を使って resources :user do get :search, on: :collection end resources :article do get :search, on: :collection end を concern :searching do get :search, on: :collection end resources :user, concerns: :searching resources :article,…

Rails routing ; resources nesting (member|controller)

入れ子に「できる」ってのは喜ばしくも恐ろしい。用法用量との相談。 resources を nesting した中でさらに member や collection も定義できる。 Sampleapp::Application.routes.draw do resources :user do resources :session do get 'frequent', on: :co…

Rails routing ; resources nest

入れ子の resources 細かいかもしれないが Sampleapp::Application.routes.draw do resources :users do resources :session, :task end end 初めの nesting resources :session, :task これは、結果的に resources :session resources :task としたことに変…

Rails routing ; member, collection

member => ID(固有の値)を必要とする。紐づくオブジェクトの一つのメンバーになるから。 ex. 写真集のプレビューページ(5ページ目だとか、8ページ目だとか) collection => ID(固有の値)は必要としない。それ自体が単一のオブジェクトだから。 ex. 検索 resou…

Rails routing ; namespace

namespace コントローラの数が増えてきて、下のように コントローラをディレクトリ分類したくなったときに使う。 controller/admin/task_controller.rb controller/user/task_controller.rb ... Sampleapp::Application.routes.draw do namespace :admin do …

Rails Model の scope 3系 と 4系

3系 と 4系で違い scope の書き方が変更されている。 (lambda の処理が関係してそう) DEPRECATION WARNING: Using #scope without passing a callable object is deprecated. For example `scope :red, where(color: 'red')` should be changed to `scope :r…

ActiveRecord new_record?

ActiveRecord の new_record? まだ save されていない record だったら true を返す。 違っていれば false。 厳密には、一つのレコードに対するオブジェクトが ストア(保存) されていなければ true 違えば false https://github.com/rails/rails/blob/260471…

find と find_by の違い

ActiveRecord::FinderMethods より モノが違うので一言では書けないです 概要 #find(*arg) 正常系処理 実引数の値はテーブルのプライマリーキーに対応していることを期待 甲. find(value) 値を WHERE 句で条件制約して SELECT する値がテーブル中に存在する…

save/save! create/create!

前提情報 create_table "products", force: true do |t| t.string "title" t.text "description" t.string "image_url" t.decimal "price", precision: 8, scale: 2 t.datetime "created_at" t.datetime "updated_at" end class Product < ActiveRecord::Bas…

new と build

自身で改めて class Cart < ActiveModel has_many :line_items end class LineItems < ActiveModel belongs_to :cart end [1] Cart.new は OK Cart.build は NG [2] c = Cart.new して c.line_items.new, c.line_items.build は OK [3] そもそも build は ne…

find と find_by の違い と 補足

概要 User のレコードに、存在しない session[:id] を find, find_by したとき User.find(999) #=> ActiveRecord::RecordNotFound User.find_by(id: 999) #=> nil になる。 ファインダ find id などの主キーに find する、ということは 目的のレコードが存在…

bundle install して rubygems.org に SSH 接続できない時

経緯 rails new foo して bundle install したら Unable to download data from https://rubygems.org/ - SSL_connect のようなエラーが出る 原因 rvm が最新版ではなかった 解決手順 rvm get stable して bundle install したら難なく ディストリ ごとに挙…