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

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

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

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

Active Record

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

Q&A

解決済

2回答

2907閲覧

ActiveRecordで取得したDBのデータの最初と最後の行にレコードを追加する方法

hiepita1

総合スコア37

Ruby on Rails

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

Active Record

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

0グッド

0クリップ

投稿2017/04/06 17:07

###前提・実現したいこと
ActiveRecordでModelから取って来た配列の最初の行と最後の行に、同様のモデルのレコードを一行ずつ追加したいです。
(Modelからとってきた値を元に集計して、最初の行と最後の行に表示するレコードが決まるため。)
どのようにすればActiveRecordに対してレコードを追加できるでしょうか。

###該当のソースコード
以下のようなことを実現したいです。

controller { @data = model.getdata } model { def self.getdata //実際にはユーザーに指定されたレコード数を取得する。 仮に20レコードとする。 modeldata = Model.select(:kingaku).offset(0).limit(20) //modeldata[1]~[21]に取得したデータ。 [0]と[21]には異なったデータを入れたい modeldata[0].kingaku = 別のテーブルから一行目の金額を別途取得 modeldata[22].kingaku = kingaku[1]~[21]をsumした金額 end } view //Viewではmodelをeachで回すだけで22レコードを表示したい <%= @data.each do|data|%> <%= data.kingaku %> <%= end%>

###試したこと
現在は一行目と最後の行を別のインスタンス変数に入れて表示していますが、Viewに無駄なコードが増えるので、上記のように同じモデルに格納したいです。
###補足情報(言語/FW/ツール等のバージョンなど)
ruby on rails5
postgresql

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

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

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

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

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

guest

回答2

0

ruby

1 modeldata.push(Model.build(kingaku: sum))

は、

ruby

1 modeldata << Model.new(kingaku: sum))

という書き方もできます。

ただ、現在は金額だけを表示しているのでActiveRecordに追加する形でも問題ないかと思いますが、例えば、

日付売り上げ
1月10日1000円
1月11日1575円
1月12日2200円
‥‥
合計100000円

のような表示をする場合を考えると、現在と同様に、ActiveRecordとは別のインスタンス変数を使う方が良いような気もします。

投稿2017/04/15 14:15

s-show

総合スコア203

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

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

hiepita1

2017/04/26 15:11

ご回答ありがとうございます。 こういった書き方もできるんですね、勉強になりました。
guest

0

ベストアンサー

rubyはゆるい言語なので

ruby

1//modeldata[1]~[21]に取得したデータ。 [0][22]には異なったデータを入れたい 2 sum=modeldata.sum(:kingaku)//kingaku[1]~[21]をsumした金額 3 modeldata.push(Model.build(kingaku: sum)) 4 modeldata.unshift(Model.build(kingaku: 別のテーブルから一行目の金額を別途取得))

とすればいいのではないですかね。
pushは一番最後に
unshiftは一番最初に要素を追加します。
buildはModelを生成して保存しません。
modeldata[0],[22]は保存せず、使い捨てるといった形で運用しましょう

投稿2017/04/07 01:42

moke

総合スコア2241

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

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

hiepita1

2017/04/26 15:11

連絡が遅れてしまい申し訳ありません。 無事解決いたしました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問