findなどで取得したデータに対してカラムを追加したいです
@article = Article.where(id: 1)
@articleの中にはid,nameがあると仮定します
@article[0]['test'] = "a"
みたいにできないのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
実テーブルに存在しない項目にデータを追加したいならモデルに「attr_accessor」を定義してはどうでしょう?
ruby
1class Article < ActiveRecord::Base 2 attr_accessor :test 3end 4 5@article = Article.where(id: 1) 6@article[0].test = "a"
投稿2016/04/22 07:05
総合スコア206
0
where の結果に対して map{|p| p.attributes} とすると hash の配列になります。
その後、そのハッシュに適宜 {key, value} を追加しては如何ですか?
$ rails c Frame number: 0/20 [1] pry(main)> Order.where(id: [1, 2]) Order Load (0.2ms) SELECT "orders".* FROM "orders" WHERE "orders"."id" IN (1, 2) ORDER BY ordered_at DESC +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | id | client_id | status | price | ordered_at | created_at | updated_at | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ | 2 | 1 | active | 200 | 2000-01-01 04:58:33 UTC | 2016-03-12 09:58:33 UTC | 2016-03-12 09:58:33 UTC | | 1 | 1 | received | 100 | 2000-01-01 09:58:33 UTC | 2016-03-12 09:58:33 UTC | 2016-03-12 09:58:33 UTC | +----+-----------+----------+-------+-------------------------+-------------------------+-------------------------+ 2 rows in set [2] pry(main)> results=Order.where(id: [1,2]).select(:id, :client_id, :status) Order Load (0.5ms) SELECT "orders"."id", "orders"."client_id", "orders"."status" FROM "orders" WHERE "orders"."id" IN (1, 2) ORDER BY ordered_at DESC +----+-----------+----------+ | id | client_id | status | +----+-----------+----------+ | 2 | 1 | active | | 1 | 1 | received | +----+-----------+----------+ 2 rows in set [3] pry(main)> results.map{|p| p.attributes}.map{|x| x[:test] = "xxx"; x } => [{"id"=>2, "client_id"=>1, "status"=>"active", :test=>"xxx"}, {"id"=>1, "client_id"=>1, "status"=>"received", :test=>"xxx"}]
参考情報
- ActiveRecordのオブジェクトをハッシュにする http://konbu13.hatenablog.com/entry/2016/01/14/071709
投稿2016/04/23 03:26
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
whereならこんな感じでいけると思います。
@article = Article.where(id: 1) @article[0].test = 'hoge'
投稿2016/04/22 01:37
総合スコア10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
[3] pry(#<WidgetsController>)> @reports[0].test = 1
NoMethodError: undefined method `test=' for #<DailyAnalyticsReport:0x007f0015390e38>
となります
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。