サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
ayaketan.hatenablog.com
関数のテストをするとき、正常に例外が発生するかテストしたかった。 仮に下記のような関数を作る def get_name(number) case number when 1 "名前1" when 2 "名前2" else raise ArgumentError, "引数が範囲外です。number= #{number}" end end specのテストには下記のように記載する。 describe "get_name" do context "正常系" do it "1のとき、名前1を返す" do input = 1 result = "名前1" expect(get_name(input)).to eq(result) end it "2のとき、名前2を返す" do input = 2 result = "名前2" expect(get_name(input)).to eq(result)
N+1問題の対策のため、「Bullet」をインストールした。 BulletはN+1問題を検出してくれます。 [環境] Windows8 Ruby 1.9.3(p125) Ruby on Rails 3.2.9 Gemfileに下記のように記述する。 group :development do # N+1問題の警告を出力 gem "bullet" end コマンドプロンプトでbundle installを実行する。 bundle insatall config\environments\development.rbに下記を追記する。 config.after_initialize do Bullet.enable = true # Bulletプラグインを有効 Bullet.alert = true # JavaScriptでの通知 Bullet.bullet_logger = true #
N+1問題解決のため、includesの設定をしていた。 groupがuserを参照しており、userがdepartmentとpostを参照しているとき、groupからdepartmentとpostの両方ををincludesで指定するのにちょっと手間取った。 group → user → department・post 下記のように書いたらうまくいった @groups = Group.order(:id). includes({user: [:department, :post]}) 関連: Rails4 3階層のincludesの指定 - ayaketanのプログラミング勉強日記
ユーザーをグループ分けするときに、そのグループに所属するユーザーをチェックボックスで選択したい。 複数のチェックボックスの入力結果を処理するときに、不要な"0"が取得できてしまったので、メモ。 まずは、ビューでチェックボックスを実装 <% @users.each do |user| %> <%= f.check_box :user_id, {:name => "grouping[user_id][]"}, user.id %> <%= f.label :user_id, user.name, :value => user.id %> <br> <% end %> すると、HTMLは次のようになった <input name="grouping[user_id][]" type="hidden" value="0" /> <input id="grouping_user_id" name="g
データベースにテーブルを作ったが、列名を変更したくなった。 列名の変更方法を調べたのでメモ。 ①マイグレーションファイルを作成 コマンドプロンプトで下記のようなコマンドを実行する。 rails g migration RenameColumnToTargetTable (例) コマンドプロンプトで下記のコマンドを実行 rails g migration RenameColumnToUsers ※ここではusersテーブルの列名を変更する。 すると、下記のようなマイグレーションファイルが作成される。 ※数字の部分は環境によって異なる db/migrate/20140108005106_rename_column_to_users.rb ②マイグレーションファイルを編集 ①で作成したマイグレーションファイルを開き、下記のように編集する。 class RenameColumnToTargetTa
Rails4で次のようにActiverecordを書いたら、警告メッセージが表示された。 Post.includes(:comments).where("comments.title = 'foo'") Rails4からは、読み込んだ関連テーブルの値を利用するためには、referencesメソッドで利用することを明示しなければならないようです。 正しくは、下記のように書く。 Post.includes(:comments).where("comments.title = 'foo'").references(:comments) 実際に表示された警告メッセージは次のようなものでした。 DEPRECATION WARNING: It looks like you are eager loading table(s) (one of: deviations, users) that are r
ユーザーをCSVファイルから登録したかった。 csvファイルをアップロードして読み込む方法をメモする。 ルーティングの設定 アップロードするCSVファイルの指定画面と、CSVファイルの読み込み処理のルーティングを設定する。 config\routes.rbに下記のように記載する。 resources :users do collection do get 'import_csv_new' post 'import_csv' end end ビューの作成 CSVファイルの指定画面を作成する。 app\viewsにimport_csv_new.html.erbファイルを作成し、下記のように記載する。 ※form_tagでは、multipartを別ハッシュにすること。 <h1>社員登録(CSVファイル)</h1> <%= form_tag({controller: "users", action
fooのモデル、ビュー、コントローラを作成し、barのビュー、コントローラを作成した。 barのビュー「edit」でfooの更新を行いたかった。 従来の書き方ではbarのビュー「edit」からfooのコントローラが呼ばれてしまった。 barのビュー「edit」にbarのコントローラを指定するよう修正を行った。 # 従来の書き方 <%= form_for(@foo}) do |f| %> ↓ # barのコントローラを指定 <%= form_for(@foo, :url => {:controller => :bars, :action => :update}) do |f| %> barのビューの「edit」からbarのコントローラの「update」が呼ばれるようになった。 参考: named routesのform_forの書き方 | 超ド素人のRuby on Rails挑戦日記
下記のページを参考にログイン画面を作ってみた。 Running Cadence: Ruby on Rails3.2でログイン機能を実装する。 アンドロイド・アミーゴ・Rails Ruby on Railsログイン機能 KENJIRO LIFE: Ruby on Rails の flash 変数 [環境] Windows8 Ruby 1.9.3(p125) Ruby on Rails 3.2.9 前回作ったlessonプロジェクトにログイン画面を作ってみた。 ①bcrypt-rubyをインストール lessonフォルダにあるGemfileのbcrypt-rubyのコメントを外す。 # gem 'bcrypt-ruby', '~> 3.0.0' ↓ gem 'bcrypt-ruby', '~> 3.0.0' コマンドプロンプトでインストール実行。 bundle install ②ユーザーmod
下記のページを参考にERBの使い方を勉強する。 Rubyist Magazine - 標準添付ライブラリ紹介 【第 10 回】 ERB eRuby eRubyでは任意のテキストファイルにRubyスクリプトを埋め込める。基本的には次のマークアップ(eRubyタグ)を使ってRubyスクリプトを埋め込む。 <%...%> Rubyスクリプト片をその場で実行 <%=...%> 式を評価した結果をその場に挿入 <%#...%> eRubyのコメント eRubyはHTMLやXMLに限らず、任意のテキストファイルの出力に使用できる。 ERBの基本的な使い方 ERBの一番基本的な使い方は、eRubyスクリプトをERB.newの第一引数に指定してERBオブジェクトを生成し、resultメソッドで結果を文字列で取得する。 require 'erb' str = "hoge" erb = ERB.new("va
rspecによるdeviseを使ったコントローラーのテストに手こずったのでメモ。 [環境] Windows8 Ruby 1.9.3(p125) Ruby on Rails 3.2.9 devise 2.2.3 factory_girl_rails 1.4.0 rspec-rails 2.13.0 spec\supportにcontroller_macros.rbを追加し、下記のように記述する。 module ControllerMacros def login_admin @request.env["devise.mapping"] = Devise.mappings[:admin] sign_in FactoryGirl.create(:admin) end def login_user controller.stub(:authenticate_user!).and_return tr
下記のページを参考にSequelの使い方を勉強する。 README.rdoc Sequelの簡単な使い方 例文に自分なりの解説を追加すると下記のようになった。 require 'rubygems' require 'sequel' DB = Sequel.sqlite # メモリ上のデータベースにアクセスするオブジェクト「DB」を作成 # itemsというテーブルを作成。 DB.create_table :items do primary_key :id # プライマリキーとなるInt型の列「id」を作成 String :name # String型の列「name」を作成 Float :price # Float型の列「price」を作成 end items = DB[:items] # テーブル「items」にアクセスするオブジェクトを作成 # テーブル「items」にレコードを挿入 i
このページを最初にブックマークしてみませんか?
『ayaketanのプログラミング勉強日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く