こちらのコードで、生年月日から年齢を取得できるようですが、
(Date.today.strftime("%Y%m%d").to_i - @user.birthday.strftime("%Y%m%d").to_i) / 10000
Userモデルのageカラムを誕生日になったら勝手に変わるように設定したいのですが、
どこにどのような記述をすれば良いのかわからないので、教えて下さい。
モデル構成
userモデル | birthdayカラム | ageカラム |
---|---|---|
date型 | integer型 |
登録の際に、birthdayのみフォームで入力させています。
def create @user = User.new( birthday: params[:birthday] ) @age = (Date.today.strftime("%Y%m%d").to_i - @user.birthday.strftime("%Y%m%d").to_i) / 10000 @user.age = @age if @user.save session[:user_id] = @user.id redirect_to users_path, notice:'新規登録しました' else render :new end end
ただ、コントローラーでageを登録してしまうと、次の誕生日を迎えたときにageカラムが変わらないと思うので、
rbファイルになにか記述できたりしないかなと調べたのですが、見つからなかったのでこちらで質問させていただいてます。
皆さん年齢ってどうやって登録させてますか?
----追記----
ageカラムは検索項目のために追加したカラムなのですが、
もしageカラム無しで、年齢検索するとしたら、どのような記述でできますでしょうか?
user.rb class User < ApplicationRecord scope :search, -> (search_params) do return if search_params.blank? birthday_from(search_params[:birthday_from]) .birthday_to(search_params[:birthday_to]) end scope :birthday_from, -> (from) { where('? <= birthday', from) if from.present? } scope :birthday_to, -> (to) { where('birthday <= ?', to) if to.present? } end
users コントローラ #users 検索 ストロングパラメータ def user_search_params params.fetch(:search, {}).permit(:birthday_from, :birthday_to) end
index.html.erb <%= form_with(scope: :search, url: users_path, method: :get) do |f| %><!-- ajax通信 --> <p><%= f.label(:birthday, User.human_attribute_name(:birthday)) %></p> <%= f.date_field :birthday_from, value: @search_params[:birthday_from] %> <br>から<br> <%= f.date_field :birthday_to, value: @search_params[:birthday_to] %> <%= f.submit "検索" %> <% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/21 08:06
2020/08/21 08:08
2020/08/21 08:12