【问题标题】:Rails 4 acts as votable retrieving record of the "voted" itemRails 4 充当“投票”项目的可投票检索记录
【发布时间】:2016-02-01 00:50:37
【问题描述】:

我可以显示用户喜欢的投票,但我不知道如何显示喜欢记录的实际记录。检索用户投票记录的最简单方法是什么?

controller.rb

def show
  @user = User.find(params[:id])
  @liked = @user.votes
end

show.html.haml

= @liked.to_json

结果:

[{"id":5,"votable_id":8,"votable_type":"Post","voter_id":2,"voter_type":"User","vote_flag":true,"vote_scope":null,"vote_weight":1,"created_at":"2016-02-01T00:33:15.968Z","updated_at":"2016-02-01T00:33:15.968Z"}]

我该如何打开它,以便仅显示帖子记录中的标题、描述等?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 acts-as-votable


    【解决方案1】:

    投票是否有 post_id ?我假设你有 vote.rb 和 post.rb 模型。

    投票.rb

    belongs_to :post
    

    post.rb

    has_many :votes
    

    在节目中

    - @liked.each do |l| 
      = l.post.title 
      = l.post.description 
    

    【讨论】:

    • 不,我使用acts_as_votable gem,所以他们没有post_id
    • 好吧,您可以使用迁移添加一个额外的 post_id 列。 stackoverflow.com/a/4834906/3396429
    • 但是拥有多态关联的重点不就是你不必拥有 post_id 列吗?
    • 我假设 votable_id 持有用户 ID 和帖子 ID.. 你尝试使用 @user.votable
    【解决方案2】:

    您现在可能已经找到了答案——但我会这样做,以显示用户使用 acts_as_votable gem 投票的事项列表。我使用的是设计,所以我使用current_user 来指定控制器中当前登录的用户。

    controller.rb

    @liked_posts = current_user.get_up_voted(Post)
    

    view.html.erb

    <h3>Your 'liked' blog posts</h3>
    <% @liked_posts.each do |post| %>
        <p><%= link_to post.title, post %></p>
    <% end %>
    

    您可以拥有任意数量的这些 - 显示用户在您的应用程序中“喜欢”的东西的集合:

    @liked_quotations = current_user.get_up_voted(Quote)
    @liked_comments = current_user.get_up_voted(Comment)
    @liked_stories = current_user.get_up_voted(Story)
    

    然后,循环显示每个集合。

    还有另外两种可能有用的方法——一种收集所有投票赞成的东西,另一种收集所有反对的东西:

    current_user.get_voted(Post)
    current_user.get_down_voted(Post)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多