''と""と%Qと%qの違い
''と""と%Qと%qの違い
今更ですが、''と""の違いを良くわからずにここまで来てしまっていたので
きちんと勉強してみました。
Rubyでは文字列をあらわすとき
str = "hogehoge"
str = 'hogehoge'
ともあわらわすことができますが
この違いはいったいどうなっているのか。
簡単に表現すると
'' :シンプルな文字列表現
"" :高機能な文字列表現
となるそうです。
''は基本的に入力された文字列をそのまま表現します。
これに対して""では次のようなことが可能です。
(1)「/n」を改行コードとして解釈してくれる。
(2)「#{}」の中身をRubyの変数として解釈してくれる。
moji = "ほげ"
puts "文字の中身は#{moji}"
↓
文字の中身はほげ
という違いがあります。
基本的には「""」のほうが便利ですが、それなりにオーバヘッドがかかると思われるので
用途に応じて利用すると良いと思います。
さらに、文字列の中で「"」「'」を利用したい時には
「/"」「/'」とすることで表現できます。
puts "/"も使える"
↓
"も使える
しかし、「/」をつけるのも面倒なときには
「%Q」「%q」を使うと良いと思います。
puts %Q{"も使える}
↓
"も使える
となります。注意点としては「%Q」「%q」ともに
「{}」か「||」で範囲を指定します。
なお、「%Q」は機能的に「""」に「%q」は機能的に「''」に対応します。
erbの中で別のerbをincludeする
erbの中で別のerbをincludeする
erbでは、他の画面と共通利用したいような部品があります。
(1)ページヘッターやページフッターのような全画面共通の部品
↓こういうやつですね。
(2)入力フォームなど
(3)検索結果などのスプレッドシート
(1)は <%= render :file => 'xxxx' %>
(2)、(3)は <%= render :partial => 'xxxx' %>
というように書くことで、他のerbを呼び出すことができます。
二つの違いは以下の通りです。
■render :file
単純によそにあるerbを読み込むだけです。
ページヘッターやページフッターのように動的ロジックはあっても
外側からパラメーターを渡す必要の無いようなerbの読込に適しています。
※ファイル名に特に制約は無いです。
■render :partial
外側からパラメーターオブジェクトを渡すことができます。
これにより、汎用的に利用することができます。
入力欄のモデル名や、出力すぷれっとの検索結果などを外から渡せます。
<%= render :partial => 'form', :locals => { :form => form} %>
なお、呼び出されるほうのerbは名前の頭に「_」がついている必要があります。
上の例では'_form.erb'という名前になります。
ActiveRecordのエラーメッセージを表示するために使われるのもこの機構です。
<%= render :partial => 'error' %>
↓のページでものすごくエクセレントな解説が載っていたので参考にしてください。
http://d.hatena.ne.jp/zariganitosh/20080722/1216706519
というわけで、使い分けて使ってみると便利です。
ActionMailerでエラーをハンドリングする
ActionMailerでエラーをハンドリングする
LoginEngineのメール通知機能をいじる中でActionMilerを設定しました。
当初あまりちゃんと設定しなくても、メールが送信できて喜んでいたのですが
少し動かしていくうちに色々はまりました。
ActionMailerを動かすためには
メールサーバーなど色々設定しないといけないようです。
環境ごとにメールサーバーが異なるようなら
condfig/environments/xxxx.rb
環境ファイルで、環境にかかわらず設定が一緒なら
condfig/environment.rb
に下記のように設定すればよいです。
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:address => 'smtp.hoge.co.jp',
:port => 25,
:domain => 'hoge.co.jp',
:user_name => 'hogehoge',
:password => 'fugafuga',
:authentication => :login
}
特に気をつけたいのが
ActionMailer::Base.raise_delivery_errors = true
で、これを設定しないとエラーがスルーしていきます。
はじめこれを知らずに、エラーがスルーして
画面上では正常に処理が完了されるのに、メールが送信されずに悩みました。
さて、本題のエラーのハンドリングなのですが
エラーは様々なエラーが発生するのでエラーメッセージで判定するしかないようです。
今のところ以下の二つのみハンドリングしています。
・SMTPサーバーへの接続に失敗
→(原因)システム障害
→(エラーメッセージ)User unknown in virtual mailbox table
・宛先メールアドレスに送信できない
→(原因)ユーザーの入力ミス
→(エラーメッセージ)Name or service not known
他にもありそうですが、今のところは放置しています。
beigin
(メールを送信する処理)
rescue => excptn
if excptn.message.include?("User unknown in virtual mailbox table") then
flash.now[:warning] = "メールアドレスにメールが送信できませんでした。メールアドレスを確認ください。"
elsif excptn.message.include?("Name or service not known") then
raise StandardError.new("SMTPに接続できません")
else
raise StandardError.new("その他エラーです")
end
end
という感じで地道にハンドリングしています。
もう少しかっこよい方法があるといいなぁと思う今日この頃です。
インクリメント(i++)
TopHatenar
Hatenaブログを
RSSの登録数、ソーシャルブックマークの登録数でランキングする
TopHatenarというサービスがあります。
このブログの下部についているアイコンがリンクとなっています。
Hatenaブログであれば特に何もしなくても下記のサイトから利用でき
自分のブログの位置づけを確認することが出来ます。
http://tophatenar.com/
RSSについては「Livedoor Reader」と「Fastladder」の登録者数が
ソーシャルブックマークについては「はてなブックマーク」が
調査対象となっているそうです。
このブログの結果も表示しておくと、こんな感じです。
たくさんの人にみてもらっているんだなぁと感謝するとともに
もっとたくさんの人に見てもらえるように
価値ある情報を提供できるよう精進します。
というわけで、興味があればぜひどうぞ。
なかのひと.jp
ブログの下になぞの日本地図が存在しているのを
これは「なかのひと.jp」というアクセス解析サービスのアイコンです。
これはインターネットアクセスのドメインから
どこの組織に所属している人のアクセスかを特定して
地図上に表現してくれるというサービスです。
いったいどこの組織の人が自分のブログを見ているのかがわかってなかなか面白いです。
なお、大手プロバイダー経由のアクセスに関しては
結果から除外されているようで
中小企業・組織からのアクセスは表示されないです。
このブログの結果はこんな感じです。
※なお、私企業に関しては公表してまずいのかも知れないので名前に線を引いてあります。
ブログバーツをブログのフッターに埋め込めば完了なので結構簡単でした。
と、と
<% %>と<% -%>、<%= %>と<%=h %>
Railsをはじめた当初、サンプルソースなどを見ると
<% %> <% -%>
<%= %> <%=h %>
と、色々な書き方があって、何が正しいのか良くわからない状況でした。
一応、それぞれの違いをまとめておきます。
<% %>と<% -%>
ERB又はRHTMLの中で、Rubyのロジックを埋めたい時には<% %>を利用するのが一般的ですが<% %>を使うと、この行の後ろの改行コードがHTMLに残ってしまいます。
<% if @hoge_flg then %>
ホゲ
<% end %>
と、記述したときには、@hoge_flgがTRUEの場合次のようなHTMLが生成されます。
ホゲ
この用に無駄な改行が入ってしまうのを避けるために使うのが<% -%>です。
<% if @hoge_flg then -%>
ホゲ
<% end -%>
と、記述して、@hoge_flgがTRUEの場合次のようなHTMLが生成されます。
ホゲ
というわけで、<% %>よりも<% -%>を利用するほうが正しいようです。
<%= %>と<%=h %>
HTMLに文字を埋め込む時には<%= %>を使いますが
このままだと、クロスサイトスクリプティングを防ぐことが出来ず
これを防ぐために利用するのが<%=h %>となるそうです。
これを利用すると、サニタイジングという
安全な文字列かを行ってくれるようなので
習慣として<%=h %>を使うほうが良いと思います。
結論
<% %>よりも<% -%>を使う!!<%= %>よりも<%=h %>を使う!!
ということで。