0

私のインデックスコントローラー:

class IndexController < ApplicationController
    def index
        @posts = Post.find(:all, :limit => 10,
                            :joins => "LEFT JOIN `users` ON users.user_id = posts.user_id",
                            :select => "posts.*, users.username",
                            :order => "posts.created_at DESC")
    end
end

ビューからusers.usernameにアクセスするにはどうすればよいですか?

私は試した

<% @posts.each do |post| %>
    <%= post.username %>
<% end %>

しかし、空白のメッセージが表示されるため、機能しないようです...

編集:

LEFTJOINで次のコードを使用する必要がありました。

:joins => "LEFT JOIN `users` ON posts.user_id = users.id",
4

3 に答える 3

0

これを試して ..

@posts = Post.find(:all, :limit => 10,
                            :joins => "LEFT JOIN `users` ON users.user_id = posts.user_id",
                            :select => "posts.*, users.username as user_name",
                            :order => "posts.created_at DESC")


<% @posts.each do |post| %>
    <%= post.user_name %>
<% end %>
于 2012-06-29T08:38:51.127 に答える
0

LEFT JOIN で次のコードを使用する必要がありました。

:joins => "LEFT JOIN `users` ON posts.user_id = users.id",
于 2012-06-29T08:43:17.430 に答える
0

あなたのコードは MVC フレンドリーではありません。これがRailsでのより良い方法です。

1. モデルは次のクエリを実行する必要があります。

class User < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  belongs_to :user
  scope :last_10, order("created_at desc").limit(10) #or "id desc" which is quicker
end

2.コントローラーでクエリを呼び出す

class IndexController < ApplicationController
  def index
    @posts = User.find_by_username(the_username).posts.last_10
  end
end

3.あなたの見解では、あなたはできる

<% @posts.each do |p| %>
  <%= post.user.username %>
<% end %>
于 2012-06-29T10:12:33.423 に答える