【问题标题】:How to list the users who LIKE a given Post如何列出喜欢给定帖子的用户
【发布时间】:2013-05-08 08:17:24
【问题描述】:

我无法弄清楚如何列出所有喜欢特定帖子的用户。目前我正在使用:

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

这让我可以计算与该特定 POST 相关的所有 LIKES。但它没有列出实际用户。

我已经尝试使用它来列出所有喜欢该帖子的用户

<%= 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'S 吗?

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>

【问题讨论】:

    标签: ruby ruby-on-rails-3.2


    【解决方案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,然后询问其用户,然后询问用户其名称。

    【讨论】:

    • 谢谢,这正是我所需要的,但我假设这将被放置在我的一个模型中的方法中正确吗?......我把它放在我的视图中并得到了这个...... .... [#
    • ic...是的,这很有意义,谢谢!! :)
    猜你喜欢
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 2018-07-27
    • 2019-08-13
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多