如果某些东西列出了限制的东西,则列出所有在轨道中

时间:2013-12-19 15:24:46

标签: ruby-on-rails

我正试图弄清楚如何根据用户计划仅显示一定数量的类别。所以在我的控制器中我有以下内容;

def check_plan?
  User.current.plan_id == "" && User.current.bins.count == 2 || User.current.plan_id ==     "nil" && User.current.bins.count == 2
end
helper_method :check_plan?

注意:我知道,不是很漂亮,但它现在会做。所以基本上:check_plan?检查一些事情。

现在我想,我可以将它用作我们的类别列表作为起点,这样如果用户不在任何计划中,如果他们在计划中它们全部显示,则他们仅限于显示2。这是我认为可行的,但事实并非如此。我之前已经完成了,但是不记得它到底是怎么回事,所以任何帮助都会受到赞赏。

<% if check_plan? %>
   <% @bin_list.order("position").limit(2).each do |bin| %>
<% else %>
   <% @bins_list.order("position").each do |bin| %>
<% end %>

不是真的有效,我知道为什么,但他们的意志是我所有的其他尝试将这些线与check_plan结合在一起。

2 个答案:

答案 0 :(得分:2)

这种逻辑本质上属于模型。不要滥用帮手。

class User < ActiveRecord::Base
  def bin_limit
    check_plan? ? 0 : 2
  end

  def check_plan?
    # Your logic
  end

  def bins_with_limit
    bins.with_limit(bin_limit)
  end

end 

class Bin < ActiveRecord::Base
  def self.with_limit(limit)
    return self if limit <=0
    self.limit(limit)
  end
end

查看

current_user.bins_with_limit.each do |bin|

答案 1 :(得分:1)

首先,rails方法.blank?将为“”或“nil”返回true,因此您可以从重构代码开始,如下所示:

def check_plan?
  ( User.current.plan_id.nil? || User.current.plan_id.blank? ) && User.current.bins.count == 2 
end
helper_method :check_plan?

其次,您在下面的代码中调用了块,因此您需要使用end

来完成它们
<% if check_plan? %>
   <% @bin_list.order("position").limit(2).each do |bin| %>
   <% end %>
<% else %>
   <% @bins_list.order("position").each do |bin| %>
   <% end %>
<% end %>

当然,您需要在上面的bindo部分之间添加end内容。