0

特定の投稿に「いいね!」をしたすべてのユーザーを一覧表示する方法がわかりません。現在私は使用しています:

<span class="count"><%= dailypost.likes.count %></span>

これにより、その特定の POST に関連付けられたすべての LIKE をカウントできましたが、実際のユーザーはリストされていません。

これを使用して、その投稿が好きだったすべてのユーザーをリストしようとしました

<%= dailypost.likes %>

代わりに私は戻ってきます:

[#<Like id: 360, dailypost_id: 306, user_id: 1, created_at: "2013-04-28 21:51:45", updated_at: "2013-04-28 21:51:45">, 

#<Like id: 319, dailypost_id: 306, user_id: 104, created_at: "2013-04-28 19:27:35", updated_at: "2013-04-28 19:27:35">, 

#<Like id: 314, dailypost_id: 306, user_id: 103, created_at: "2013-04-28 19:24:19", updated_at: "2013-04-28 19:24:19">]

ユーザーまたは USER_ID のリストを取得する方法を知っている人はいますか??

RAILS 初心者の方、助けてください!!

モデル

class User < ActiveRecord::Base
  has_many :likes, dependent: :destroy
  has_many :dailyposts, dependent: :destroy
end

class Dailypost < ActiveRecord::Base
  belongs_to :user
  has_many :likes
end

class Like < ActiveRecord::Base
  belongs_to :user
  belongs_to :dailypost
end

データベース

ActiveRecord::Schema.define(:version => 20130210095553) do

create_table "dailyposts", :force => true do |t|
  t.string   "content"
  t.integer  "user_id"
  t.datetime "created_at",         :null => false
  t.datetime "updated_at",         :null => false
end

create_table "likes", :force => true do |t|
  t.integer  "dailypost_id"
  t.integer  "user_id"
  t.datetime "created_at",   :null => false
  t.datetime "updated_at",   :null => false
end

create_table "users", :force => true do |t|
  t.string   "name"
  t.string   "email"
  t.datetime "created_at",                                :null => false
  t.datetime "updated_at",                                :null => false
end

end

ビュー

<span class="count"><%= dailypost.likes.count %></span>

<%= dailypost.likes %>

<span class="like">
 <% if like = current_user.likes.find_by_dailypost_id(dailypost.id) %>
   <%= form_for like, :html => { :method => :delete }, remote: true do |f| %>
     <span title="Unlike!"><%= image_submit_tag "Superman1.png" %></span>
   <% end %>
 <% else %>
 <%= form_for current_user.likes.build, remote: true do |f| %>
   <div><%= f.hidden_field :dailypost_id, value: dailypost.id %></div>
  <%= f.hidden_field :user_id %>
    <span title="Like!"><%= image_submit_tag "Superman2.png" %></span>
  <% end %>
 <% end %>
</span>
4

1 に答える 1

1

理解する最も簡単な方法は、それぞれを取得likeし、その を尋ねることですuser

dailypost.likes.map {|l| l.user}

もちろんlike、これは各 のデータベース検索を行いますが、何百ものユーザーがいる場合は避けたいと思うかもしれません。

したがって、より洗練された方法は、単一のクエリを実行してすべてのユーザーを取得することですuser_id

User.find(dailypost.likes.map {|l| l.user_id})

これにより、ユーザーのリストが表示されます。それをどうするかはあなた次第です。HTML リストだけが必要な場合は、代わりにこれを試してください。

<ul>
<% dailypost.likes.each do |l| %>
     <li> <%= link_to(l.user.name, l.user) %></li>
<% end %>
</ul>

これは、それぞれlikeを順番に見て、ユーザーを尋ね、次にユーザーに名前を尋ねます。

于 2013-05-08T08:32:44.333 に答える