比较日期> =但不包括自我

时间:2016-11-03 05:23:38

标签: ruby-on-rails ruby date model-view-controller methods

模型

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,所以我想要>=,但是现在当@challengelink_to时,它会一遍又一遍地重新加载当前>=点击。

我如何使用@challenge,但not self的例外是什么,所以也许在模型方法中以某种方式使用<%= link_to '← Previous', challenge_path(@challenge.previous_user_challenge_date_started), class: "prev" %>

查看

@challenge = Challenge.find(params[:id])

控制器

p

2 个答案:

答案 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)