背景情報:
モデル: アプリとアナウンス
アソシエーション: アプリ has_many アナウンス
状況: AnnouncementsController に非常に単純なインデックス アクションがあります。
def index
app = App.find(params[:app_id])
@announcements = app.announcements
end
jbuilder gem を使用して json を出力していたところ、@announcements 配列が空であることが示されましたが、その中にレコードがあることは確かです。ソースを確認したところ、「空?」続行する前にコレクションが空かどうかを確認するメソッド。私は何が「空?」を見たかったのですか?メソッドが返されるので、index アクションに次の行を追加しました。
def index
app = App.find(params[:app_id])
@announcements = app.announcements
puts @announcements.empty?.to_s # Returns: "true"
end
「本当」は、データがあると確信しているため、期待していませんでした。そこで、@announcement 変数の内容を確認するために「inspect」呼び出しを追加しました。
def index
app = App.find(params[:app_id])
@announcements = app.announcements
puts @announcements.inspect # Returns: "[#<Announcement id: 1, app_id: 1, title: \"20% off everything!\", content: \"Enjoy 20% off everything from now until yesterday!!...\", image: \"0e06b94d-1ac6-4d90-b937-9fa7bfaf90c9.jpg\", status: 0, created_at: \"2012-08-27 15:33:00\", updated_at: \"2012-08-27 15:33:00\">]"
puts @announcements.empty?.to_s # Returns: "false"
end
うーん... 面白い。したがって、変数に「検査」を追加する以外は何も変更せずに、「空?」メソッドは異なる結果を返しました。
私が行ったもう1つの興味深い観察は、代わりにこれを行った場合:
def index
@announcements = Announcement.all
puts @announcements.empty?.to_s # Returns: "false"
end
「空?」うまくいきました。
他の誰かが同じ問題を抱えていますか、それとも私だけですか?