模型
def previous_user_challenge_date_started
user.challenges.where('date_started >= ?', date_started).order('date_started ASC').first #date_started is a date, not datetime
end
有些挑战会有同样的date_started
,所以我想要>=
,但是现在当@challenge
是link_to
时,它会一遍又一遍地重新加载当前>=
点击。
我如何使用@challenge
,但not self
的例外是什么,所以也许在模型方法中以某种方式使用<%= link_to '← Previous', challenge_path(@challenge.previous_user_challenge_date_started), class: "prev" %>
?
查看
@challenge = Challenge.find(params[:id])
控制器
p
答案 0 :(得分:3)
范围对于这种事情非常方便:
class Challenge < ActiveRecord::Base
belongs_to :user
# return challenges after a particular date
scope :on_or_after, ->(date) { where(arel_table[:date_started].gteq(date)) }
# return all but these challenges
scope :excluding, ->(id) { where.not(id: id) }
def previous_user_challenge_date_started
user.challenges # get the users challenges
.excluding(self) # but not this one
.on_or_after(date_started) # that are on or after the start date
.order('date_started ASC')
.last
end
end
此处还有关于使用范围的精彩文章的强制性链接:Mastering ActiveRecord and AREL
答案 1 :(得分:0)
为什么不比较点击挑战的ID。
为id添加另一个where条件不等于clicked challenge。
所以,添加 .where('id!=?',clicked_id)