2016-11-13 20 views
0

レッツは、私は、コントローラとの取引を持っていると言う:私の見解ではRailsのループの複数のインスタンス変数

@transactions = Transaction.all.group(:type) 

@transaction_date_asc = Transaction.all.order(:DATE => :desc).group(:type) 

@transaction_date_desc = Transaction.all.order(:DATE => :asc).group(:type) 

私はループのすべての3つのインスタンスをする必要があります。

このように、各取引タイプに対して最新の金額または最も古い金額または割引を表示するようなものです。

<% @transactions do |transaction|%> 
    transaction.type.name 
    <%end%> 

<% @transaction_date_asc do |transaction_asc|%> 
    transaction_asc.amount 
    <%end%> 

    <% @transaction_date_desc do |transaction_desc|%> 
    transaction_desc.amount 
    <%end%> 

    <% @transaction_date_asc do |transaction_asc|%> 
    transaction_asc.discount 
    <%end%> 

    <% @transaction_date_desc do |transaction_desc|%> 
    transaction_desc.discount 
    <%end%> 

は、どのように私は私の見解では、ループ、カラムと<%エンド>を配置することが出来るのですか?

+0

これらの製品はどのように関連していますか? – slowjack2k

+0

製品には、意味を成す例はありません。質問を編集します – Catmal

+0

まだレコード間の接続が見えません。私の視点では、ランダムなレコードセットをループして表示します。これらすべてのレコード間の接続は何ですか?彼らは同じタイプ、id、または何を共有していますか?その例では – slowjack2k

答えて

1

誰かがより良い解決策を思いつくかもしれませんが、私の座席から見ると、ビュー内の各グループのクエリを実行して最初の日付トランザクションを取得する必要があるようですが、プラス側では、最後の日付のトランザクションのコントローラでビューで

@transactions = Transaction.group(:type).having('DATE = MAX(DATE)') 

...

<% @transactions do |transaction| %> 

    <% first_transaction = Transaction.where(type: transaction.type).order('transaction_date').first %> 

    <%= transaction.type.name %> 
    <%= first_transaction.amount %> 
    <%= transaction.amount %> 
    <%= first.transaction.discount %> 
    <%= transaction.discount %> 

<% end %> 

しかし...ビュークリーナーのロジックを保つためには、最初と最後のトランザクションを返しますトランザクションタイプのインスタンスメソッドを持つことができます。

class Type << ActiveRecord::Base 

    def first_transaction 
    Transaction.where(type: self).order('transaction_date ASC').first 
    end 

    def last_transaction 
    Transaction.where(type: self).order('transaction_date DESC').first 
    end 

end 

は、次にコントローラに...

@types = Type.all 

は、ビューに...私は#tryを示唆してい

<% @types.each do |type| %> 
    <%= type.name %> 
    <%= type.first_transaction.try(:amount) %> 
    <%= type.last_transaction.try(:amount) %> 
    <%= type.first_transaction.try(:discount) %> 
    <%= type.last_transaction.try(:discount) %> 
<% end %> 

理由は無いの取引の場合に対処することです特定のタイプのために存在しています。

+0

こんにちは、あなたの答えに感謝します。問題のポイントは、ビュー内の異なるループの使用を理解することでした。だから、基本的に複数のインスタンス変数をループすることはできませんが、一緒に存在することのできない条件を適用する必要があるときは、ローカル変数またはインスタンスメソッドを設定するのが適切な方法です。私はそれを正しく理解していますか? – Catmal

+0

通常、何らかの理由で複数のインスタンス変数を使用しないでください。開発者のためのSandi Metzのルールのルール#4を参照してください... https://robots.thoughtbot.com/sandi-metz-rules-for-developers – SteveTurczyn

+0

ネストされた関係をループするのは問題ありませんが、一般的に2つの並行ループは困難です。そのような場合にできることは、プライマリの "loop"で '#each_with_index'を使ってから、インデックスを使って他のコレクションの要素にアクセスすることです。 – SteveTurczyn

関連する問題