ページ

ラベル sinatra の投稿を表示しています。 すべての投稿を表示
ラベル sinatra の投稿を表示しています。 すべての投稿を表示

2016年10月1日土曜日

sinatraで変数を展開できない時の対処法

状況


sinatraで変数を展開してURLに代入しようとしました。
実行してみると、変数が代入されるべきところには、変数の名前が入っていて、変数が展開されていませんでした。

redirect '/browse/"#{@isbn}"/"#{@id}"'

が、

/browse/#{@isbn}/#{@id}

となってしまいます。

原因


ダブルクォーテーション「 " 」ではなく、シングルクォーテーション「 ' 」で囲んでいたことが原因です。

ダブルクォーテーション「 " 」と、シングルクォーテーション「 ' 」の違いとは?

シングルクォートでは#{}という特殊文字の解釈が行われません。そのため、変数や定数の展開は行われません。文字をそのまま表示したい時に使えばよいのではないでしょうか。

ダブルクォーテーションでは、展開がされます。日本語文字もダブルクォーテーションで囲むため、基本はダブルクォーテーションを使うようにすれば良いのではないでしょうか。

ただ、この違いを知っておくと、必要なときに使い分けられるため、プログラム技術の向上につながります。このような違いも知っていくことが、優秀なプログラマーへと繋がるのではないでしょうか。

対処


変数の展開は、ダブルクォーテーション「 " 」ではなく、シングルクォーテーション「 ' 」で囲む


こちらのサイトが、この記事で書いていることの参考になると思います。
(この質問サイトもおすすめです)
【sinatra】変数を使ったパス指定ができない

2016年9月14日水曜日

【sinatra】invalid byte sequence in Windows-31J対策

状況


sinatraを使ってWebアプリケーションを作成していると、

invalid byte sequence in Windows-31J

というエラーが気まぐれに出ます。
このエラーページにある
Windows-31J
というのは、Shift-JISを改造した文字コードみたいなものです。(検索してみてください。詳しく解説しているサイトがあります)

原因


rubyは違う文字コード(例えば UTF-8 など)で書かれたソースコードをWindows-31Jで読み込もうとするため、エラーが表示されるのです。

対処


対策として、

Encoding.default_external = 'UTF-8'

をrubyファイル(.rb)の先頭(1行目)に入力してください。

※UTF-8の部分は、保存したときの文字コードに合わせてください。
ただ、プログラミングをするのならUTF-8を強くお勧めします。というか、こちらが標準です。
(バッチファイルを書くのならShift_JISでもよいと思いますが...)
参考:RubyのSJISはShift_JISじゃない

入力するのは、ERBファイル(.erb)ではないです。

こうすることで、rubyのインタープリタに文字コードを知らせることができます。