1

Ruby-on-Rails アプリ (継承した最初のアプリ) で同じ問題が発生し続けます。ビューがユーザーを反復処理し、それらに関するデータをユーザーごとに 1 行の html テーブルに配置する管理ダッシュボードがあります。現在、埋め込みルビーで反復を実行し、ユーザーのデータを探し、時にはそれを処理し、反復しながら行ごとにテーブルに配置するビューを持っています。

私はレールにかなり慣れていませんが、プログラムにビューからのデータベース呼び出しの多くを実行させることは、MVC モデルを壊しているように見え、あまり安全ではないようです。現在、支払い処理会社 (Stripe) から呼び出すデータを使用しようとしていますが、View から呼び出すのは非常に安全ではないようです。具体的には、ストライプを付けた郵便番号に基づいて、顧客の場所を列に追加する予定です。これには、アカウントに関連付けられているクレジット カードについて Stripe に電話する必要があります。

これが問題です。3 つの方法が考えられますが、そのうちの 1 つだけが機能します (ただし、それは間違っていると思いますので、別の方法を教えていただければ幸いです)。

  1. コントローラーでユーザーを反復処理します。必要なデータを取得し、それを使用して何かを行い、ビューにデータを取得できるようにします。ビュー内のユーザーを繰り返し処理し、そのユーザーにのみ関連付けられているデータをコントローラーからフェッチし、ユーザーごとに 1 つのテーブル行を作成します。繰り返しますが、それを行う方法がわかりません。
  2. コントローラー内のデータを反復処理し、何らかの形でデータをビューに送り、データを受信して​​いることを認識し、各反復を行に配置する必要があります (および反復からの各項目をセルに配置する必要があります。これは可能ですか?
  3. 私が今していること: Controller では、すべてのユーザーのローカル変数を作成する以外は何もせず@users=User.all、ビューですべてを行います。

現在、ビュー内のコード (これらの例の 1 つです。これはいくつかのビューで数回発生しており、顧客ページとしてのユーザー、ユーザーとコミュニティの関与ページ、およびすべての製品の別のページですべてのユーザーにアクセスしています。 ) は次のようになります。

<table id="table_of_users2">
    <thead>
        <th width="200px">First Name</th>
        <th width="200px">Last Name</th>
        <th width="200px">Email</th>
        <th width="200px">Number Representing Community Activity</th>
        <th width="200px">Favorites</th>
        <th width="200px">Comments</th>
</thead>
<tbody>
    <% @users.each do |user|%>
        <% @our_community_activity_number=0 %>
        <% @times_faved=0 %>
        <% @comments=0 %>
        <% user.engagements.each do |engagement| %>
            <% if engagement.our_community_activity==true %>
                <% @our_community_activity_number+=1%>
            <% end %>
            <% if engagement.favorite==true%>
                <% @times_faved+=1%>
            <% end %>
            <% if engagement.comment!="" || engagement.comment!=nil %>
                <% @comments +=1 %>
            <% end %>
        <% end %>
        <tr>
            <td width="200px"><%= user.first_name%> </td>
            <td width="200px"><%= user.last_name %></td>
            <td width="200px"><%= mail_to("#{user.email}")%></td>
            <td width="200px"><%= @our_community_activity_number %></td>
            <td width="200px"><%= @times_faved==0?0:@meals_faved %>
            <td width="200px"><%= @comments %></td>
        </tr>
    <% end%>
</tbody>
</table>

安全性を高め、支払い処理会社からの位置情報をページに安全に追加できるように、これを書き直すにはどうすればよいですか? このように安全に行うことができないと考えるのは正しいですか?

ありがとう。私は Rails を始めたばかりで、同じ問題に何度も遭遇しています。

4

2 に答える 2

0

Ruby は薄いコントローラーで悪名高いですが、それは悪いことではありません。active_model アプリケーションがセットアップする傾向があるだけです :)

ビューやコントローラーではなく、モデルでこの面倒な作業の多くを行う必要があります。ユーザーにengagement_metricsを尋ねる必要があります。これは、ユーザーがエンゲージメントをループし、our_community_activity_number、times_faved、およびコメントを把握する場所です。

于 2013-06-28T20:49:37.327 に答える