関連記事
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter1】
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter2】
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter3】
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter4】
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter5】
- 特にありませんでしたので、作成していません。
- 書籍『Ruby on Rails 5 超入門』つまずきやすいポイントまとめ【Chapter6 最終回
】 ★今ここ
初心者の友人向けにはじめたシリーズですが、1冊無事に終わることができました。何事もちゃんとやりきると嬉しいですね(涙)
私の環境
- Windows 10 Home 64bit
- Ruby 2.2.6
- Rails 5.0.2
つまずきやすいポイント
[p.434] RSSリーダー作成:Netの名前解決ができない
事象
書籍通りに作成すると次のエラーが発生します。
NameError (uninitialized constant AjaxController::Net)
原因
Netライブラリが読み込めていないため、エラーになっています。
解決方法
AjaxControllerの冒頭にrequireを追加してください。
class AjaxController < ApplicationController
layout 'ajax'
require 'net/http' # この一行を追加する
# ... 省略 ...
end
[p.434] RSSリーダー作成:パースエラーが発生する
事象
Yahoo!ニュースヘッドラインにアクセスすると、次のエラーが発生します。
アクセスするURL:
http://news.yahoo.co.jp/pickup/rss.xml
エラー内容:
REXML::ParseException (Missing end tag for 'meta' (got "head")
原因
Yahoo側の都合ですが、上記URLにアクセスすると、HTTPSにリダイレクトされています。リダイレクトしているので想定するコンテンツ(ニュース一覧)ではない、レスポンスが返ってきています。その結果、パースエラーが発生しました。
リダイレクト有無の確認方法
ブラウザのデバッグツールを起動(ChromeならF12キーを押下)して、改めてURLにアクセスしてみてください。次のようにリダイレクトされているのが確認できます。
[301] http://news.yahoo.co.jp/pickup/rss.xml
↓
[200] https://news.yahoo.co.jp/pickup/rss.xml
プログラムでも確認できます。レスポンスの中身をコンソールに出力して確認してみてください。
url = URI('http://queryfeed.net/twitter?q=%23ruby&title-type=user-name-both&geocode=')
http = Net::HTTP.new(url.host)
response = http.get(url)
logger.debug response.inspect # デバッグ用に追加
# <- #<Net::HTTPMovedPermanently 301 Redirect readbody=true>
解決方法
実用的なものを作るのであれば、「リダイレクト先を遡って、何回まで許容する」といった処理を追加する必要があります。
ただし、書籍の学習範囲から逸れてくるので、とりいそぎ解決したいのであれば、次の条件のシンプルなRSSフィード用のURLを探して設定してください。
- リダイレクトしないもの。(いきなり200になる。)
- HTTPSではなくHTTPのもの。
- HTTPSのURLにいくにはまた別のコードを追加する必要になります。
例えば、QueryFeedからURLをとってくるとよいです。
(あくまで学習を急ぐ人用の解決方法なので、上記をどうやって解決できるか自分で調べてみるともっと勉強になると思います!)
[p.445] メソッド名末尾の「!」とは
deviseのログインチェックに「authenticate_account!」というメソッドを呼び出しています。末尾の「!」の意味は次の通り。
def xxx!
「!」はメソッド名の一部です。慣用的に、 同名の(! の無い)メソッドに比べてより破壊的な作用をもつメソッド(例: tr と tr!)で使われます。
引用元:Rubyで使われる記号の意味(正規表現の複雑な記号は除く) (Ruby 2.4.0)
今回の場合では、戻り値ではなく副作用として、accountというモデルの状態を変えてしまうのできっとついてるんですかね。
誤植
明らかなものは見つかりませんでした。(いや、当たり前なんですけど!)
最後に
無事に1冊終わりました。RubyやRailsに関わらず、Webアプリに関わったことがない人にも基礎から教えてくれる非常に素晴らしい本です。なので、ちょっとつまりそうかな、というところを、フォローさせて頂きました。友人向けに書き始めたものですが、これからはじめるどこかのだれかにも役に立ってくれると嬉しいなと思います。読んでいただいてありがとうございました。