質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

1回答

6796閲覧

rails/ActiveRecordの結果に要素の追加をしたいです

katosan

総合スコア14

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

1グッド

2クリップ

投稿2015/12/28 09:39

こんにちは、初めて利用します。

ruby on railsで個人アプリ開発をしています。
ページごとにPVカウントするgem "impressionist" を使用しています。
impressionist公式

集計ページを作ったところ、挙動に問題はないのですがログにWARNINGが吐かれてしまいました。
ActiveRecordの結果にハッシュ要素を追加することは出来ないのでしょうか?
気になるので、どう改善したらWARNINGを防げるのか助言をいただけるととても助かります。


PV数の多い順かつ日付が新しいデータを表示したくて下記のようなコードを書きました。

Ruby

1- 2 1 class ImpressionsController < ApplicationController 3 2 4 3 def pvlist 5 4 6 5 page_ids = Impression.group(:impressionable_id, :impressionable_type). 7 6 order('impressionable_id desc'). 8 7 count('impressionable_id').keys 9 8 10 9 impressions = [] 11 10 page_ids.each do |page_id,type| 12 11 13 12 pv = Impression.where( 14 13 :impressionable_id => page_id, 15 14 :impressionable_type => type).count 16 15 17 16 new_imp = Impression.where( 18 17 :impressionable_id => page_id, 19 18 :impressionable_type => type). 20 19 order('updated_at desc').first 21 20 22 21 # select結果に要素を追加 23 22 new_imp[:pv] = pv 24 23 impressions.push new_imp 25 24 end 26 25 27 26 28 27 impressions = impressions.sort_by{|val| -val[:pv]} 29 28 30 29 @impressions = Kaminari.paginate_array(impressions).page(params[:page]).per(10) 31 30 render "impressions/pvlist" 32 31 33 32 end

22行目で下記のWARNINGを吐いており、new_imp[:pv]を追加することは出来ていません。
logger.debug(@impressions.inspect)
の結果にpvは存在していないのに、画面には表示され正常にソートされます。

DEPRECATION WARNING: You're trying to create an attribute `pv'. Writing arbitrary attributes on a model is deprecated. Please just use `attr_writer` etc. (called from block in pvlist at app/controllers/impressions_controller.rb:22)

よろしくおねがいします。

主に参考にしたサイト
railsでActiveRecordの結果をHashに変換する方法

ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

http://d.hatena.ne.jp/favril/20100604/1275668631
hash化できるそうなのでそれで対応しました。

投稿2016/01/13 08:01

katosan

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問