こんにちは。菜笑なえです。
今回はRailsで作られたFatFreeというCRM(顧客管理システム)のバグについての備忘録です。
今回のバグは本家FatFreeでも確認できました。
本家FatFreeにログインできない方は、この記事の最後に書いているログイン情報でログインしてみてください。
FatFreeバグ内容
今回対応したバグは2つです。
- 各項目の一覧表示画面を表示しているときに、サイドバーのチェックボックスを操作すると、ページ下部にある
Campaigns per page
が未選択になる - 詳細検索をしたときにエラーが表示される
Campaigns per page
というのはページ毎の表示件数の部分ですね。
特に大きな影響を与えるバグでもないのですが、気になったので解決策を考えてみました。
対処用完成コード(コピペ用)
app/views/shared/_paginate_with_per_page.html.haml
の内容を以下に置き換えれば解決します。
= image_tag("loading.gif", size: 'thumb', class: "spinner", style: "display: none;")
= paginate
.per_page_options
%span.per_page_label
= t('entities_per_page', entity: t(controller_name))
- per_page = @per_page || current_user.pref[:"#{controller_name}_per_page"] || klass.per_page
- [ 10, 20, 30, 50 ].each do |count|
- if count == per_page.to_i
%em.current= count
- else
- q = params[:q] ? params[:q].permit! : nil
= link_to count, send("redraw_#{controller.controller_name}_path", per_page: count, query: params[:query], q: q), remote: true
本家FatFreeの元のコードは記事の最後に貼っています。
対応箇所
変更点は2箇所です。
@per_page
がない時の対応params[:q]
をの内容をpermit
で許可する
@per_page
がない時の対応
サイドバーのチェックを操作したとき、@per_page = nil
となっていました。
そのため、@per_page.to_i = 0
となり、10, 20, 30, 50
というあらかじめ用意された表示件数にマッチしないので、未選択で表示されていました。
なので@per_page
がnilにならないように変えるだけで、Campaigns per page
が未選択になるというバグを解決できます。
この部分ですね。
- per_page = @per_page || current_user.pref[:"#{controller_name}_per_page"] || klass.per_page
params[:q]
をの内容をpermit
で許可する
Advanced search
(詳細検索) をした際に、以下のエラーが出ることがありました。
unable to convert unpermitted parameters to hash
パラメータが許可されてないので、ハッシュにできないよ。と言っています。
これが出るとそれ以降の処理が進まないので、params[:q].permit!
とすることでパラメータの許可をするという対応をとりました。
ここです。
- q = params[:q] ? params[:q].permit! : nil
本家FatFreeの記述
= image_tag("loading.gif", size: 'thumb', class: "spinner", style: "display: none;")
= paginate
.per_page_options
%span.per_page_label
= t('entities_per_page', entity: t(controller_name))
- [ 10, 20, 30, 50 ].each do |count|
- if count == @per_page.to_i
%em.current= count
- else
= link_to count, send("redraw_#{controller.controller_name}_path", per_page: count, query: params[:query], q: params[:q]), remote: true
環境
Rails 5.2
おわりに
FatFreeはこれ以外にも大小いろんなバグがあるので、自分の変更がおかしいんじゃないかな?と思うと同時に、本家ではどうだろう?と確認しながら実装を進めていったほうが良いと思います。
大小いろんなバグがまだあるようなので。
とは言っても、ここまで完成されたCRMを無料で使えるのはありがたいですね!
ちなみにDEMOサイトに書いてるaaron
というユーザーでログインできない方は、以下の情報でログインできます。
誰かがaaron
のパスワード変えたみたいですね…
Username: ben
Password: ben