avosalmonのブログ

プログラミングやWebデザイン、DTMについて調べたことをメモってます。プログラマー兼ベーシストです。

【Rails】date_selectで"undefined method for translation missing ja date order string"

Viewで下記のようにdate_selectを使うと、i18nの日本語設定が足りずエラーが出た。

<%= f.date_select(:birthday, {:use_month_numbers=>true, :start_year=>1930, :end_year => Time.now.year, :default =>'1990-1-1'.to_date}, {:class => ["form-control", "inline_date_select"]})  %>


こんなエラーが出た
undefined method for translation missing ja date order string


config/locales/ja.ymlを作り、以下を記入することで解決。

ja:
  date:
    formats:
      default: "%Y/%m/%d"
      short: "%m/%d"
      long: "%Y年%m月%d日(%a)"
    day_names: ["日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"]
    abbr_day_names: ["日", "月", "火", "水", "木", "金", "土"]
    month_names: ["~", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
    abbr_month_names: ["~", "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]
    order: ["year", "month", "day"]
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"
      short: "%y/%m/%d %H:%M"
      long: "%Y年%m月%d日(%a) %H時%M分%S秒 %Z"
    am: "午前"
    pm: "午後"


参考記事
transitive.info - Rails 4 と Ruby 2.0 を使う (3)

【Rails】active_adminとwill_paginateを同時に使うとNoMethodError

Railsでactive_adminを導入し、管理ページからAdmin Users等のリソース一覧のリンクをクリックすると以下のエラーが出た。

NoMethodError (undefined method `per' for #<ActiveRecord::Relation::ActiveRecord_Relation_AdminUser:0x007fb64c4bce40>):


どうも、will_paginateとactive_adminを同時に使おうとすると出るエラーみたい。

解決策

config/initializers下に下記の内容でkaminari.rbを作る。

Kaminari.configure do |config|
  config.page_method_name = :per_page_kaminari
end

なぜ直ったかは良く分かりません。誰か教えてください。

参考記事
David Chua : Fix undefined method `per' error on Will_Paginate and ActiveAdmin

Railsでページネーションを導入する

Railsでページネーションを導入する方法を調べました。
will_paginateというgemを使うと簡単に実装できました。

Gemfile

gem 'will_paginate'
gem 'bootstrap-will_paginate'


Controller

class MembersController < ApplicationController

  def index
    @members = Member.paginate(page: params[:page])
  end

end


ビュー

<%= will_paginate %>
  <ul>
    <% @members.each do |member| %>
      <li><%= link_to get_member_name(member), member %></li>
    <% end %>
  </ul>
<%= will_paginate %>

以上!

【Rails】Helperメソッドをcontroller内で使用できるようにする

RailsのHelperメソッドは、デフォルトでView内で使用することができるが、controller内では使用することができない。

これをcontroller内でも使用できるようにするには、application_controller.rbでHelperをincludeしてやれば良い。

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  include SessionsHelper
end

上の例だと、controller内でSessionsHelperのメソッドを使用することができるようになる。