2016-04-02 3 views
0
部分

内のテーブルのフィールドを表示:Railsの4 - 選択私は各テーブルに表示されるさまざまなフィールドを持つ私の<code>Job</code>モデルの2つの異なる表形式の表現を表示しようとしています

dashboard.html.erbを

... 
<table class="table table-bordered table-hover table-striped"> 
    <thead> 
    <tr> 
     <th>Job #</th> 
     <th>Job Name</th> 
     <th>Due Date</th> 
     <th>Progress</th> 
    </tr> 
    </thead> 
    <tbody> 
    <%= render @jobs_due_soon %> <!-- version 1 --> 
    </tbody> 
</table> 

... 

<table class="table table-bordered table-hover table-striped"> 
    <thead> 
    <tr> 
     <th>Job #</th> 
     <th>Job Name</th> 
     <th>Cut At</th> 
    </tr> 
    </thead> 
    <tbody> 
    <%= render @jobs_completed %> <!-- version 2 --> 
    </tbody> 
</table> 
... 

_job.html.erbバージョン1

<tr> 
    <td><%= job.number %></td> 
    <td><%= job.name %></td> 
    <td><%= job.due_date %></td> 
    <td><%= job.progress %></td> 
</tr> 

_job.html.erbバージョン2

<tr> 
    <td><%= job.number %></td> 
    <td><%= job.name %></td> 
    <td><%= job.cut_at %></td> 
</tr> 

これを達成するための最良の方法は何ですか?私は2つの異なる部分を持つことができ、どの表を表示しているかによってそれぞれを呼び出すことができます。代わりに、バージョン1または2を指定するローカル変数を渡すこともできます。しかし、これらのオプションのどちらも、問題にアプローチする正しい方法とは感じられません。

答えて

0

責任を分離する方法によって、これを行う方法は2通りあります。私はあなたのコードベースに精通していないので、クラスと変数の名前は一般的な考え方を得るためのものです。

置きレポートジョブのモデルにロジック:

# job.rb 
# ------ 

    def Job.jobs_due_soon 
    # logic for generating the data needed for your jobs due soon table 
    end 

    def Job.jobs_completed 
    # logic for generating the data needed for your jobs completed table 
    end 


# jobs_controller.rb 
# ------------------ 

    def dashboard 
    @jobs_due_soon = Job.jobs_due_soon 
    @jobs_completed = Job.jobs_completed 
    render :dashboard 
    end 


# dashboard.html.erb 
# ------------------ 

    <%= render 'table', data: @jobs_due_soon %> 
    <%= render 'table', data: @jobs_completed %> 


# _table.html.erb 
# --------------- 

    # format according to the how you set up the output of Job::jobs_due_soon 
    # and Job::jobs_completed. 
    # 
    # see second example for suggestions on how to iterate over data of 
    # dynamic length in the table. 

コントローラへのデータのための場所ロジック:

# jobs_controller.rb 
# ------------- 

    def dashboard 
    @table_one_data = [job.name, job.number, job.due_date, job.progress] 
    @table_one_body = jobs_due_soon 
    @table_two_data = [job.number, job.name, job.cut_at] 
    @table_two_body = jobs_completed 
    render :dashboard 
    end 

# dashboard.html.erb 
# ------------------ 

    <%= render 'table', row_data: @table_one_data, table_body: @table_one_body %> 
    <%= render 'table', row_data: @table_two_data, table_body: @table_two_body %> 


# _table.html.erb 
# ------------------ 

    # format according to how you set up the output of Job::jobs_due_soon and 
    # Job::jobs_completed 
+0

私は解決策を感謝し、私はこのように異なるアプローチを取ることを好むだろう表示ロジックをコントローラに入れてMVCの分離に違反します。 – Ryan

+0

私はあなたがその事件をどのようにすることができるかを見ることができます。私の答えを更新しました。 – danmakenoise

関連する問題