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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

5回答

4730閲覧

activerecordで取得したデータに新しいカラムを追加したい

test0001

総合スコア224

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/04/21 11:36

findなどで取得したデータに対してカラムを追加したいです

@article = Article.where(id: 1)

@articleの中にはid,nameがあると仮定します

@article[0]['test'] = "a"

みたいにできないのでしょうか?

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

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

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

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

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

guest

回答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

ShoheiUyama

総合スコア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"}]

参考情報

投稿2016/04/23 03:26

katoy

総合スコア22324

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

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

0

こちらを参考にすると、
以下でどうでしょうか。

ruby

1@article = Article.where(id: 1).first.to_json 2@article = JSON.parse(@article).delete_if{ |key, val| val.nil? } 3@article['test'] = "a" 4puts @article['test'] #=> "a"

なお型はhashになっていますので、オブジェクトとしては利用できません。

投稿2016/04/22 06:53

tink1e_

総合スコア31

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

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

0

whereならこんな感じでいけると思います。

@article = Article.where(id: 1) @article[0].test = 'hoge'

投稿2016/04/22 01:37

YudaiNishikawa

総合スコア10

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

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

test0001

2016/04/22 03:49

[3] pry(#<WidgetsController>)> @reports[0].test = 1 NoMethodError: undefined method `test=' for #<DailyAnalyticsReport:0x007f0015390e38> となります
guest

0

これはいかがでしょうか?

@article = Article.where(id: 1) @article.name = 'test'

これでいけると思います。

投稿2016/04/21 15:31

ayu

総合スコア212

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

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

test0001

2016/04/21 22:13

articleのtestに代入したいのです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問