twol’s diary

嵌ったことなど

RailsでJavaScriptでの遷移時にフラッシュを表示させる

調べるとフラッシュに相当する文言を隠して( display: none とか?) おいて、JavaScriptで表示させる( display: block とか)の方法しかなかった。GETパラメータで送るのヤダなぁと思ったので別の方法を考えた。

アクションを作ってフラッシュ付きでリダイレクトさせる

具体的にはこう。

JavaScript

location.href = '/items/redirect_with_flash_message';

Rails

class ItemsController < WebController
  def redirect_with_flash_message
    flash[:alert] = 'ログインが必要です'

    redirect_to new_user_session_path
  end
end

ransackでキーワード引数を変数にする

ransackで検索を行う場合、キーワード引数で条件を指定するが、

Item.ransack(key_matches_any: value).result

ここの key_matches_any を変数にしたい。

キーワード引数の説明をよく見ると

1.9 でも、呼び出し側のキーワード引数はできていました。

log("Hello!", level: "INFO")

このキーワード引数は { :level => “INFO” } というハッシュとして当該メソッドに渡されます。 受け取り側でこのハッシュを分解する処理が必要でした。

Ruby 2.0.0 のキーワード引数

とあるので、従来どおりキーワード引数を使わずハッシュで渡してあげれば良い。

Item.ransack({"#{key}_matches_any" => value}).result

ということ。多分他のキーワード引数を使っているメソッドの実行でも使えると思う。

2019/12/04追記

普通にキーワード引数に変数を使えた!

Item.ransack("#{key}_matches_any": value).result

でおk

TypeError: Cannot read property 'compilation' of undefined エラーが出た

npm run build したら TypeError: Cannot read property 'compilation' of undefined エラーが出た。パッケージごちゃごちゃしたのが行けなかったかなぁ。。

いろいろググってなかなか解決策が見つからなかったけど、結局

TypeError: Cannot read property 'compilation' of undefined
    at OptimizeCssAssetsWebpackPlugin.apply (xxx)
         :

とあるところの二行目のパッケージの依存関係だった。

TypeError: Cannot read property 'compilation' of undefined OptimizeCssAssetsWebpackPlugin とかでググると同じように依存関係で困った人のStack Overflowとかが引っかかる。そのバージョンで npm install パッケージ名@バージョン番号 してから npm run build すればおk

【WordPress】WP_Queryで 'orderby' => 'post__in' を指定したときに 'order' => 'DESC' が効かない

array_reverse してあげればいいんじゃないかな? $favorites は投稿IDの配列ね。

// ダメ
$wp_query = new WP_Query(array('post__in' => $favorites, 'posts_per_page' => -1, 'orderby' => 'post__in', 'order' => 'ASC'));
// OK
$wp_query = new WP_Query(array('post__in' => array_reverse($favorites), 'posts_per_page' => -1, 'orderby' => 'post__in'));

はてなブログでSyntax highlightする方法が全然わかんねー。書いてある通りにやってるんだけどなんで?

BuddyPressから送られる登録メールを認証しようとしたら嵌った

環境は KUSANAGI on さくらVPS

コーポレートサイトとサービスのサイトを別ドメインで運用しているため、サービス(BuddyPress)からコーポレートサイトのドメインでメールを送るにはSMTPの設定が必要。 設定していないとGmailで受信したときにスパムの可能性があるアイコンが付けられてしまう。他のメーラーでも受信されないなどの問題があるかもしれない。

f:id:twol:20190920095729p:plain

今回使ったのはWP Mail SMTP。 設定方法はこちらを参考にさせていただいた。

my-util.com

具体的な設定は次の通り。SMTPパスワードはさくらのサーバーコントロールパネルからwebメールにログインするときと同じパスワード。

f:id:twol:20190920100856j:plain

「送信元アドレス」と「送信者名」でそれぞれ「Force From Email」と「Force From Name」のチェックが必要かもしれない。

ここまで設定して上のタブからEmail Test > [Send Email] をクリックとすると成功! Gmailで見ても!アイコンが消えている。

ところがBuddyPressから送られてくる登録メールは未だに!アイコンが付いている…。 どうやらメール設定の更新が必要なもよう。

qiita.comhttps://qiita.com/sayama0402/items/a51f3dcd9896c169b5eb

Reinstall emails を行ったところ、無事BuddyPressからでも!アイコンが消えた!

f:id:twol:20190920101947p:plain

WordPressにStripe決済を入れたかったのでプラグインを検討してみた

表題の通り。自分が必要なこと目線なので漏れがあるかも。

WP Full Stripe (本命)

無料版で買い切りの支払い(インライン表示)、 有料版でサブスクの支払いとポップアップ表示ができる。

インライン表示ならログインユーザーのメールアドレスを予め埋め込むことができる。 DBに複数のテーブルが作られ、フォーム(テンプレ)と支払い結果がそれぞれ入ってくる仕組み。 どの投稿から購入したかをDBに入れられると良いが、それはWebhockを使って書き込むしかないのか?

サブスク用途には問題なさそう。サブスクの解除もできる。ローカル環境だとメールが飛ばなかったが…。

Stripe Payments

投稿を拡張してファイルダウンロードできる仕組み。 かなり投稿を汚すし個人的にはイマイチ。素材販売サイトならぴったりだとは思う。 有料版ではサブスクもできるらしいが試していない。

WP Simple Pay Lite

こちらも投稿を拡張する仕組み。ファイルダウンロード機能もない? 有料版ではサブスクもできるらしいが試していない。

RSpecでユーザーエージェントを変更してリクエストする

get :endpoint, { params: {} }, headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36' }

みたいなカンジ

github.com