Ruby on Rails シングルクォーテーションとダブルクォーテーションの謎

Rubyにおいて文字列を表すのにシングルクォーテーション( ' )やダブルクォーテーション( " )を使って囲む。

 

シングルクォーテーション( ' )で囲むと囲ったものは全てが文字列と認識されて、そのまま出力される。

 

 

food = '牛丼'
drink = 'コーラ'

puts '私は#{food}が好きです。n/飲み物は#{drink}が好きです。'

<出力結果>

私は#{food}が好きです。n/飲み物は#{drink}が好きです。

 

 

ダブルクォーテーション( " )で囲むと、特殊文字や式展開がある場合は行ってくれる。

 

food = "牛丼"
drink = "コーラ"

puts "私は#{food}が好きです。\n飲み物は#{drink}が好きです。"

<出力結果>

私は牛丼が好きです。

飲み物はコーラが好きです。

 

 

しかし、Ruby on Railsのテストコードにおいて謎が出てきた。

 

結合テストコードで下記のような記述があり、これは正解。

expect(page).to have_selector ".content_post[style='background-image: url(#{@tweet_image});']"

 

しかしなぜか式展開があるにもかかわらずシングルクォーテーションが使われている。

background-image: url(#{@tweet_image}); '

 

ちなみにこの部分、シングルクォテーションをダブルクォーテーションに書き換えるとエラーが起きる。

 

細かいところばかりが気になってしまう悪い病気だ。

調べてもわからないから今日は諦めて明日また調べよう。

 

11/12 追加記載

すっかり今日までブログに追記するの忘れてた。

これは単純で

 

expect(page).to have_selector ".content_post[style="background-image: url(#{@tweet_image});"]"

 もしこうしちゃうと

".content_post[style="    "]"

ダブルクォーテーションで囲まれた部分が上記のように認識されてしまうから。

 

ちなみに

expect(page).to have_selector ".content_post[style='background-image: url(#{@tweet_image});']"

 

これは一度

".content_post[style='background-image: url(#{@tweet_image});']"

このようにダブルクォーテーションで囲まれてるから

 

'background-image: url(#{@tweet_image});'

この部分がシングルクォテーションで囲まれていようと#{@tweet_image}の式展開はできるという理屈みたい

 

以上