SORA.GetOutput()

備忘録と捌け口とシェアと何か。

Cookieに書き込む値を暗号化する

Railsから通常の方法でCookieに書き込む値は、平文となっているためCookieを盗まれると情報が丸見えになっています。これを回避するために、Railsにはsignedというメソッドがあります。

cookies[:hoge_key] = hoge_value # 暗号化されない
cookies.signed[:hoge_key] = hoge_value # 暗号化される

また、先ほど投稿した永続Cookieを作るpermanentメソッドと組み合わせることも可能です。

cookies.permanent.signed[:hoge_key] = hoge_value # 暗号化される/20年後に有効期限

ホント↓このチュートリアル学べることがとても多い!

www.railstutorial.org

永続Cookieに値を保存する

Railsでは、公式ではありませんが暗黙の了解で「永続Cookie」=「20年後に有効期限の切れるCookie」としています。Cookieに値を保存するにはvalueexpiresを設定する必要があるので、一般的には「永続Cookie」に値を保存するという意味合いのコードは以下のように書きます。

cookies[:hoge_key] = { value: hoge_value,
                       expires: 20.years.from_now.utc }

しかし、Railsコミュニティでは上記のようなコードを書くことが多いため、以下の様な短縮記法も用意されています。

cookies.permanent[:hoge_key] = hoge_value

上記のように書くと、自動的にCookieの有効期限が20年に設定されます。

www.railstutorial.org

印刷時に任意の要素を消す or 印刷時のみ要素を表示する

CSS初心者なので色々なところでつまずいていますw

  • .visible-printクラスを使用すると、印刷時→表示・ブラウザ上→非表示 という要素を作成可能
  • .hidden-printクラスを使用すると、ブラウザ上→表示・印刷時→非表示という要素を作成可能

Bootstrapで作成したページを印刷するとリンクの中身が表示されてしまう問題

最初はRailsがなにか悪いことしてるのかと思いましたが、どうやらBootstrapの問題だったようです。
解決策は単純で、Bootstrap内で定義されている@printオプションを別の場所で打ち消してあげること。

www.magical-remix.co.jp

Herokuへのデプロイでハマる

Herokuではsqlite3をサポートしていないため、開発環境(DBにはデフォルトでsqlite3を使用)をそのままデプロイするとハマります。
以下2つのファイルを弄った後、Herokuにプッシュするとうまくいきました。

Gemfile

group :development do
   ・
   ・
   ・
  # 上の方に書いてあるsqlite3をここに移動し、開発環境でのみ使用する事を明言
  gem 'sqlite3'
end

# (追加)本番環境ではsqliteではなくpostgreを使うように変更
group :production do
  gem 'pg'
  gem 'rails_12factor'
end

database.yml

production:
  # 変更前
  #<<: *default
  #database: db/production.sqlite3
  # 変更後
  adapter: pg
  database: db/production.pg