『Ruby on Rails4 アプリケーションプログラミング』ではまったところ

はまったのはタイプミスとかそういう自分のミスがほとんど。いい本だ。


## 前提（環境等）

微妙に推奨環境とバージョンが異なるので注意。

各種バージョン
 - Windows7 64bit
 - Rails 4.1.8
 - ruby 2.0.0p598 (2014-11-13) [i386-mingw32]

各種gemの情報は一番下に記載。


## ダウンロードサンプル（railbook）の実行

### bundle install で Gem::RemoteFetcher::FetchError: SSL_connect エラー発生

結局httpsを使わず、httpにした。
http://qiita.com/leon-joel/items/d81675637d1938bbdf91

### 起動時にエラー TZInfo::DataSourceNotFound 

```
>rails s
=> Booting WEBrick
=> Rails 4.2.5 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
Exiting
C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.2.2/lib/tzinfo/data_source.rb:182:in `rescue in
create_default_data_source': No source of timezone data could be found. (TZInfo::DataSourceNotFound)
Please refer to http://tzinfo.github.io/datasourcenotfound for help resolving this error.
        from C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/tzinfo-1.2.2/lib/tzinfo/data_source.rb:179:i
n `create_default_data_source'
```

対処: Gemfileに1行追記し、bundle update

```
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin]
```

参考サイト
https://github.com/tzinfo/tzinfo/wiki/Resolving-TZInfo::DataSourceNotFound-Errors

### 9.5.5 「Ajax通信でJSONデータを利用する」で結果が表示されない
result.js.erbをリネームすると、jsonデータが返ってくるようにはなった。（Firefoxの開発者ツールで確認。）
「通信中」も表示された。（つまり、Javascriptも動いている。）

しかし、検索結果が何も表示されなかった。

#### 解決:
cloud-collectorさんのコメントを参照。

## 6.5.4のNOTE: Digest認証の実装
パスワードのハッシュ化の方法が分からなかった。脚注に書いてあるrealmの意味が分からず…

#### 解決:

```irb
>> Digest::MD5.hexdigest(['yamada', 'railbook', '12345'].join(':'))
=> "cb85xxxxxxxxxxxxxxxxxxxxxxxxxx"
```

## 5.8.8のNOTE: フィクスチャで大量データを生成する

サンプルとは少し違うが、erbを使って大量データを登録する場合は、timestamps(created_at/updated_at)に値が自動的には設定されないという問題があった。（null: false にしている場合はINSERTでエラーが発生する。）

解決方法としては、Time.now を明示的に埋め込んだ。
timestampの精度がデフォルトのものとは少し違うようだが、多分実害はないだろう…

```yaml
<% (1..35).each do |i| %>
base<%= i %>:
  battle_id: 1
  base_no: <%= i %>
  created_at: <%= Time.now %>
  updated_at: <%= Time.now %>
<% end %>
```

## 6.6.5: 共通ロジックをモジュールにまとめる - concernsフォルダ
（本の記述には何の問題もないが…）
moduleを定義したファイル名とmodule名に全然関係ない名前を付けてしまうと、実行時に 『NameError: uninitialized constant ...』というエラーが発生する。

例えば、module名が ModelCommon なら、ファイル名は model_common.rb としないといけないようだ。


***

## 実行環境の情報

```
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Sites\railbook>rails -v
DL is deprecated, please use Fiddle
Rails 4.1.8

C:\Sites\railbook>ruby -v
ruby 2.0.0p598 (2014-11-13) [i386-mingw32]
```


```:Gemfile
source 'http://rubygems.org'


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.1.8'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.3'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer',  platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc:rails generates the API under doc/api.
gem 'sdoc', '~> 0.4.0',          group: :doc

# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin]
```