下一步&以前通过@ user的对象?

时间:2016-10-27 13:56:45

标签: ruby-on-rails ruby

目前,如果有人点击link_to,他们就会被带到上一次或下一次挑战中。

但是link_to怎么能在仅包含@user挑战的地方工作?

查看

<% if @challenge.previous %>
  <%= link_to 'Prev', challenge_path(@challenge.previous), class: "footer-left", style: "color: white; font-style: normal;" %>
<% else %>
  <%= link_to 'Home', root_url, class: "footer-left" %>
<% end %>

<% if @challenge.next %>
  <%= link_to 'Next', challenge_path(@challenge.next), class: "footer-right" %>
<% else %>
  <%= link_to 'Home', root_url, class: "footer-right" %>
<% end %>

模型

def next
  Challenge.where("id > ?", id).first # I get nil error for... Challenge.find_by(user_id: @user.id).where("id > ?", id).first
end

def previous
  Challenge.where("id < ?", id).last # I get nil error for... Challenge.find_by(user_id: @user.id).where("id > ?", id).last
end

我知道@user在模型中不起作用,但我只是以它为例来尝试获取其所属挑战的User

1 个答案:

答案 0 :(得分:1)

要浏览用户chalenges我假设您的模型如下:

class User < ApplicationRecord
  has_many :challenges
end

class Challenge < ApplicationRecord
  belongs_to :user
end

所以你的方法应该是:

class Challenge < ApplicationRecord
  belongs_to :user

  #don't use just "next" because it's a ruby reserved keyword that you can use to skip to the next iteration of a loop
  def next_user_challenge
    user.challenges.where('id > ?', id).first
  end

  def previous_user_challenge
    user.challenges.where('id > ?', id).last
  end
end

还有一点,要浏览下一个和之前的挑战,我认为如果你比较挑战的日期或其他一些属性会更好。例如:

#next challenge
user.challenges.where('challenge_date > ?', challenge_date).order('challenge_date ASC').first

#previous challenge
user.challenges.where('challenge_date < ?', challenge_date).order('challenge_date ASC').first