Ruby on rails 如果某物列出了具有限制的某物,则在rails中列出所有内容
我正在试图弄清楚如何根据用户计划只显示一定数量的类别。因此,在我的控制器中,我有以下内容:Ruby on rails 如果某物列出了具有限制的某物,则在rails中列出所有内容,ruby-on-rails,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? 注:我知道,不漂亮,
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?
注:我知道,不漂亮,但现在就可以了。所以基本上:检查计划?检查一些东西
现在我想,我可以把它作为我们的分类列表的起点,这样,如果用户不在任何计划中,他们只能显示2,如果他们在计划中,它会显示所有人。这是我认为有效的方法,但它不起作用。我以前做过,但记不清是怎么回事,所以非常感谢您的帮助
<% if check_plan? %>
<% @bin_list.order("position").limit(2).each do |bin| %>
<% else %>
<% @bins_list.order("position").each do |bin| %>
<% end %>
我知道这是为什么,但他们会在我所有其他的尝试中,将这些行与check_plan结合在一起。首先,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 %>
当然,您需要将使用
bin
执行的任何操作放在上面的do
和end
部分之间。首先,rails方法。blank?
将返回true表示“”或nil,因此您可以按如下方式重构代码:
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 %>
当然,您需要将使用
bin
执行的任何操作放在上面的do
和end
部分之间。首先,rails方法。blank?
将返回true表示“”或nil,因此您可以按如下方式重构代码:
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 %>
当然,您需要将使用
bin
执行的任何操作放在上面的do
和end
部分之间。首先,rails方法。blank?
将返回true表示“”或nil,因此您可以按如下方式重构代码:
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 %>
当然,您需要将您正在使用的
bin
放在上面的do
和end
部分之间。这种逻辑在本质上属于模型。不要虐待助手
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
这种逻辑在本质上属于模型。不要虐待助手
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
这种逻辑在本质上属于模型。不要虐待助手
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
这种逻辑在本质上属于模型。不要虐待助手
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
您是否测试了检查计划中的每个值?确保他们返回您期望的内容的方法:检查计划是否正常。。我也试过做
如果检查计划@bin|u list.order(“position”).limit(2)。每个do | bin |
然后是内容end else@bin|u list.order(“position”)。每个do | bin |
但是它告诉我意外关键字| else
您测试过支票计划中的每个值吗?确保他们返回您期望的内容的方法:检查计划是否正常。。我也试过做如果检查计划@bin|u list.order(“position”).limit(2)。每个do | bin |
然后是内容end else@bin|u list.order(“position”)。每个do | bin |
但是它告诉我意外关键字| else
您测试过支票计划中的每个值吗?确保他们返回您期望的内容的方法:检查计划是否正常。。我也试过做如果检查计划@bin|u list.order(“position”).limit(2)。每个do | bin |
然后是内容end else@bin|u list.order(“position”)。每个do | bin |
但是它告诉我意外关键字| else
您测试过支票计划中的每个值吗?确保他们返回您期望的内容的方法:检查计划是否正常。。我也试过做如果检查计划@bin|u list.order(“position”).limit(2)。每个do | bin |
然后是内容然后end else@bin|u list.order(“position”)。每个do | bin |
但是它告诉我意外关键字| else
谢谢提醒,你说得对。关于。空白?是的,它的工作原理是一样的,我真的忘了。空白?而且处理的时候没有工作,空的?这就是为什么我在这一行中添加了一些其他选项。再次感谢String#blank?
不捕捉OP的原始代码中匹配的“nil”
。然而,这首先看起来很奇怪……其次,是的User.current.plan\u id.blank?
和User.current.bins.count确实返回了我们期望的值。我只是觉得我最初的问题行有太多的东西。霍尔格可能很奇怪,但在我能推出更好的东西之前,这是一个快速解决方案,只是和我的老板在时间线上安排得很紧:)我想String#blank?
会抓住nil
,但如果不是的话,您也可以轻松地在其中添加对User.current.plan\u id.nil?
的测试。也就是说,我还要看看@billy chan关于在你的模型中加入逻辑的回答。谢谢你的提醒,你是对的。关于。空白?是的,它的工作原理是一样的,我真的忘了。空白?而且处理的时候没有工作,空的?这就是为什么我在这一行中添加了一些其他选项。再次感谢String#blank?
不捕捉OP的原始代码中匹配的“nil”
。然而,这首先看起来很奇怪……其次,是的User.current.plan\u id.blank?
和User.current.bins.count确实返回了我们期望的值。我只是觉得我原来的问题太多了。霍尔格虽然可能很奇怪,但在我能推动之前,这是一个快速解决方案