如果声明更好写

时间:2014-05-06 14:39:34

标签: ruby ruby-on-rails-3

我想写一个评估 if ,在那时运行一段代码;

  • 用户从未发出过邀请

  • 当用户30天前发出邀请但至少发布时。

我尝试过类似的东西,但它不起作用;

<% if !current_user.invites.any? || (Date.today - current_user.invites.last.created_at.to_date) >= 30.days %> 

#some code is run here

<%  end %>

最好的方法是什么?

2 个答案:

答案 0 :(得分:4)

你可以这样做:

class User < ActiveRecord::Base

  def has_sent_invite_in_last_month?
    invites.any? && invites.last.created_at > 1.month.ago
  end

end

然后:

 <% unless current_user.has_sent_invite_in_last_month? %>
   <% #do stuff %>
 <% end %>

如果用户没有发送邀请,那么他们上个月也没有发送过邀请,所以这个措辞涵盖了这两种情况。

答案 1 :(得分:1)

您可以检查过去30天内是否有对该用户的邀请:

unless current_user.invites.where("created_at >= ?", 30.days.ago).exists? 
  # ...
end

查询应该是User模型中的方法。