インターン52日目

さて今日は

  1. 背景画像切り替えが出来なくなっている原因の調査
  2. ランキング入りの怖話が削除されるとトップページ、ランキングページが表示できなくなるバグ修正
  3. Twitter Cardsの申請のために各ページにog:titleを追加
  4. ブロック機能のバグ修正 (途中)

をしていた.

1は前回”怖話中で指定の画像が無い場合に背景がなくなる”の対策をした際に

$.ajax
  type: 'get'
  url: '画像のURL'
  success: ->
    そのまま表示
  error: ->
    デフォルト画像を表示

のようにやっていたがためにSame Origin Policyに違反するようになってしまったことが原因(本番環境では画像はcdn.kowabana.jpという別ドメインにある). Access-Control-Allow-Origin ヘッダーというのをcdn.kowabana.jp側に追加してやればいいらしいけどどうやるんだろ.

2はそもそも怖話が削除されたときにランキングからも削除されなければいけない(はず)なので, StoryモデルからRankingモデルにdependent: :destroyを追加.

3はapp/views/layouts/application.html.hamlにメタタグを追加するだけ(各ページのタイトルを生成する関数はすでにあったので).

4はコメントしたユーザを指定してブロック出来る機能なのだけれど, ブロックしたはずのユーザのコメントも表示されているというもの(もう一度ブロックするとユニーク制約によりエラー). 怖い話, 画像, 漫画の全てにコメントをつけることが出来る仕様なので, それぞれで場合分けをしてブロックされたユーザのコメントは取得しないようにしたい. 具体的には

select comments.* from comments
left join stories on comments.commentable_type = 'Story' and comments.commentable_id = stories.id
left join wallpapers on comments.commentable_type = 'Wallpaper' and comments.commentable_id = wallpapers.id
left join comics on comments.commentable_type = 'Comic' and comments.commentable_id = comics.id
where comments.user_id not in (select blocks.destination_id from blocks where blocks.source_id =
(case when comments.commentable_type = 'Story' then stories.user_id
      when comments.commentable_type = 'Wallpaper' then wallpapers.user_id
      else comics.user_id end))

のようなSQLを発行できるようにしたい.

基本的にブロック済みのコメントは表示されないはずなので, とりあえずdefault_scopeに以下のように記述してみたのだが

default_scope -> {
  joins('left join stories on comments.commentable_type = "Story" and comments.commentable_id = stories.id ').
  joins('left join wallpapers on comments.commentable_type = "Wallpaper" and comments.commentable_id = wallpapers.id ').
  joins('left join comics on comments.commentable_type = "Comic" and comments.commentable_id = comics.id ').
  where('comments.user_id not in (select blocks.destination_id from blocks where blocks.source_id =
    (case when comments.commentable_type = "Story" then stories.user_id when comments.commentable_type = "Wallpaper" then wallpapers.user_id else comics.user_id end))')
}

Can not eagerly load the polymorphic associationと表示されて失敗. 一旦ここまで.