Ruby on rails 在“之间切换”;主动的;及;“不活跃”;索引视图中的记录

Ruby on rails 在“之间切换”;主动的;及;“不活跃”;索引视图中的记录,ruby-on-rails,rails-routing,Ruby On Rails,Rails Routing,说到Ruby和Rails,我非常“绿色”,我可以在VB中轻松做到这一点,但我想学习Rails 我有一个简单的索引视图,它显示了数据库中的所有客户机,我知道了如何替换控制器中的索引操作,以便只显示标记为“活动”的客户机(客户机表中的一个字段),但是我的脑袋在游动,试图找出在两个或三个记录集之间切换的路由和/或控制动作(用VB术语) 我的最终目标是在索引视图上有单选按钮,用户可以在其中选择“活动”、“非活动”或“全部” 目前我在客户端控制器中有这个 @clients = Client.find(:a

说到Ruby和Rails,我非常“绿色”,我可以在VB中轻松做到这一点,但我想学习Rails

我有一个简单的索引视图,它显示了数据库中的所有客户机,我知道了如何替换控制器中的索引操作,以便只显示标记为“活动”的客户机(客户机表中的一个字段),但是我的脑袋在游动,试图找出在两个或三个记录集之间切换的路由和/或控制动作(用VB术语)

我的最终目标是在索引视图上有单选按钮,用户可以在其中选择“活动”、“非活动”或“全部”

目前我在客户端控制器中有这个

@clients = Client.find(:all, :conditions => { :active => true })
#@clients = Client.find(:all, :conditions => { :active => false })
#@clients = Client.all.order(sort_column + ' ' + sort_direction)
如果我把其中两行注释掉,剩下的一行就完全按照我的意思做了

4个具体问题:(1)如何编写条件语句以实现此切换,(2)控制器,应在何处执行此操作?路由?在其他地方?,(3)这可以通过索引视图中用户可选择的单选按钮实现吗?,(4)如何将我的“订单”条件添加回。(我试着用菊花链把它拴在末端,但没用。)

提前感谢,,
MDS

您有两种策略

1) 将所有记录加载到页面上,根据它们的活动状态给它们一个类,并隐藏其中一些记录。单选按钮附加了javascript,用于显示或隐藏具有特定类的记录

2) 加载一组记录,并使单选按钮触发服务器重新加载列表内容的请求,通过不同的参数,例如“active=true”或“active=false”(当params[:active]不存在时,您可以加载所有这些参数)。如果这是通过ajax实现的,那就更好了,但是您可以让它重新加载整个页面


我不会通过路由来实现这一点,因为它只是一个参数。

您可以在索引视图中有一个下拉列表,其中包含所有3种状态(单选按钮可能没有那么大的不同,但我现在没有示例):

在控制器中,然后使用参数值调用作用域(如果已设置):

@clients = Client.all.order(sort_column + ' ' + sort_direction)
@clients = @clients.active(params[:active]) unless params[:active].blank?

无需干扰路由,因为您只需传递一个params值。

谢谢@tirdadc,我将尝试一下,只需一个问题。。。什么是“lambda”(除了希腊字母,或者不知道答案的lambda sez是什么?)lambda函数与匿名函数相同,您可以找到更多详细信息。Lambda通常在命名范围中用于向其传递参数(在本例中为
active
值)。一旦您有机会尝试此方法,并且如果对您有效,请接受答案。刚完成实现,好消息是没有错误(添加缺少的方括号后),坏消息从下拉列表中选择时,不会发生任何事情。无论在下拉列表中选择什么,所有记录始终显示。我是否需要在“更改时”中放入回调或触发什么?您需要一个实际的表单标记和一个提交按钮来将参数发送回控制器。现在让我来编辑答案,添加它。
scope :active, lambda { |active| where(:active => active)}
@clients = Client.all.order(sort_column + ' ' + sort_direction)
@clients = @clients.active(params[:active]) unless params[:active].blank?