【问题标题】:Rails: List of users who upvoted a model (pin)Rails:支持模型的用户列表(pin)
【发布时间】:2014-08-10 16:04:35
【问题描述】:

所以我有一个基本的 Rails 应用程序,用户可以在其中对 pin 投票 - 现在我想显示一个对 pin 投票的用户列表 (app/views/pins/show.html.erb)

app/models/user.rb

  has_many :pins    
  has_many :votes, dependent: :destroy
  has_many :upvoted_pins, through: :votes, source: :pin

app/models/pin.rb

has_many :votes, dependent: :destroy
has_many :upvoted_users, through: :votes, source: :user

app/controllers/pins_controller.rb

  def show
    @disable_nav = true
    @pin = Pin.friendly.find(params[:id])
    @pin.upvoted_users

  end

然后我添加了代码来渲染谁在 app/views/pins/show.html.erb 中对 pin 进行了投票

<ul><li><%= @pin.upvoted_users %></li></ul>

但是当我加载页面时显示关联错误:

#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_User:0x007fddde186370>

这很奇怪,因为当我在 Rails 控制台中检查 @pin.upvoted_users 时,我得到了正确投票的用户。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby associations vote


    【解决方案1】:

    这是由于lazy loading

    要列出用户,可以使用循环,例如:

    <ul>
      <% @pin.upvoted_users.each do |user| %>
        <li><%= user.name %></li>
      <% end %>
    </ul>
    

    【讨论】:

    • 谢谢我几分钟前发现,我将你的回答标记为正确!谢谢
    【解决方案2】:

    解决了!

    如果有人遇到同样的问题,那是我自己犯的一个愚蠢的错误: 您可以像这样呈现对 pin 进行投票的用户列表:

    <% @pin.upvoted_users.each do |user| %>
          <ul><li><%= user.name %></li></ul>
        <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2011-03-16
      相关资源
      最近更新 更多