【Rails】FatFreeのバグ解決法 [サイドバー検索と詳細検索]

rails

こんにちは。菜笑なえです。

今回はRailsで作られたFatFreeというCRM(顧客管理システム)のバグについての備忘録です。

今回のバグは本家FatFreeでも確認できました。
本家FatFreeにログインできない方は、この記事の最後に書いているログイン情報でログインしてみてください。

FatFreeバグ内容

今回対応したバグは2つです。

  • 各項目の一覧表示画面を表示しているときに、サイドバーのチェックボックスを操作すると、ページ下部にあるCampaigns per page が未選択になる
  • 詳細検索をしたときにエラーが表示される

Campaigns per page というのはページ毎の表示件数の部分ですね。

FatFreeのバグ 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

SNS

Twitter:@nae310_
Instagram:310nae