目前,如果有人点击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
。
答案 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