我非常"绿色"什么时候来到Ruby& Rails,我可以在VB中轻松完成这项工作,但我想学习rails ....
我有一个简单的索引视图,显示了我的数据库中的所有客户端,并且我想出了如何替换控制器中的索引操作以仅显示标记为" active" (客户表中的一个字段),但是我正在游泳,试图找出路由和/或控制动作,以便在两个或三个记录集之间切换(用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
答案 0 :(得分:1)
你有几个策略。
1)将所有记录加载到页面上,根据活动状态为其提供一个类,并隐藏其中的一些。单选按钮附带了javascript,显示或隐藏了特定类的记录。
2)加载一组记录,并使单选按钮触发对服务器的请求,以重新加载列表的内容,通过不同的参数,例如" active = true"或" active = false" (当params [:active]不存在时,你可以加载所有这些)。如果通过ajax完成它会更好,但你可以让它重新加载整个页面。
我不会通过路由这样做,因为它只是一个参数。
答案 1 :(得分:0)
您可以在索引视图中有一个包含所有3种状态的下拉列表(单选按钮可能没有那么不同,但我现在没有示例):
<%= form_tag("/clients", method: "get") do %>
<%= select_tag(:active, options_for_select([['Active', true], ['Inactive', false], ['All', '']], params[:active]), :prompt => 'Status') %>
<%= submit_tag("Search") %>
<% end %>
(假设您的控制器索引页位于/ clients,如果不更改form_tag中的值)
然后您将一个范围添加到您的客户端模型中,该范围采用参数,这样您就不会使控制器混乱:
scope :active, lambda { |active| where(:active => active)}
在控制器中,如果已设置,则使用参数值调用范围:
@clients = Client.all.order(sort_column + ' ' + sort_direction)
@clients = @clients.active(params[:active]) unless params[:active].blank?
因为你只是传递一个参数值,所以不需要弄乱路由。