0

私はこれをindexビューに持っています:

<% @submissions.each do |submission| %>
    <tr>
        <td><%= submission.id %></td>
        <td><%= User.find_by_id(submission.user_id).name.to_s %></td>
    </tr>
<% end %>

ビューで使用することになっていないことはわかってfind_byいます。

これをコントローラー (またはモデル) に移動するにはどうすればよいですか?

これをコントローラーのindexメソッドに挿入し、変数を使用しようとしましたが、機能しません。submissionusername

def index
    @submissions = Submission.all
    @submissions.each do |submission|
      username = User.find_by_id(submission.user_id).name.to_s
    end
end
4

3 に答える 3

3

モデル、ユーザーへの関係を追加

class Submission
  belongs_to :user
end

コントローラー、N+1 クエリを回避するためにユーザーを積極的にロードします。

def index
  @submissions = Submission.includes(:user).all
end

表示、各送信からユーザーを投影するだけ

<% @submissions.each do |submission| %>
    <tr>
        <td><%= submission.id %></td>
        <td><%= submission.user.name.to_s %></td>
    </tr>
<% end %>
于 2013-02-27T23:54:25.200 に答える
2
#in controller
def index
  @submissions = Submission.all
end

#in view
<% @submissions.each do |submission| %>
    <tr>
        <td><%= submission.id %></td>
        <td><%= submission.user.name %></td>
    </tr>
<% end %>

このコードは、次の関係を宣言したことを意味します。

  • 提出belongs_to :user
  • ユーザーhas_many :submissions(または has_one)

熱心な読み込み (DB へのクエリの使用量が少ない) を使用して、前のコードを改善できます。

@submissions = Submission.includes(:user).all
于 2013-02-27T23:51:46.127 に答える
0

ActiveRecord 関連付けを使用できます。

class Submission
  belongs_to :user

  # etc
end

次に、あなたの見解で:

<td><%= submission.id %></td>
<td><%= submission.user.first_name</td> <!-- or whatever -->
于 2013-02-27T23:47:35.513 に答える