【问题标题】:Rails: Difference between List and IndexRails:列表和索引之间的区别
【发布时间】:2010-06-24 23:18:39
【问题描述】:

我很欣赏这是一个令人难以置信的菜鸟问题,但是在 Google 上搜索了多个搜索词组合后,我很遗憾仍然一无所知。当一个人不知道时,这些事情可能很困难,而当一个人知道时,这些事情就很明显了。

我有一个半主页,进来的客户可以选择查看查询列表或做一些其他事情。这不是主页,而是网站内的一种迷你“总机”。

七种标准 RESTful Rails 控制器方法是(据我了解):

List # shows a list of records generated with .find(:all)
Show # shows details on one record
New # initiates new record
Create # saves and renders/redirects
Edit # finds and opens existing record for edit
Update # updates attributes
Delete # deletes record
  1. 当某些用户需要查看并非字面意思是 .find(:all) 的选定记录“列表”时,应该使用什么?考虑到我仍然需要一个列表函数来为我提供 .find(:all) 用于其他目的,这将如何工作?
  2. 我听说 Rails 控制器中使用了“索引”,但我不知道索引和列表之间的区别。
  3. 为了获得最佳实践和最佳设计,您会为小型交换机(以及“关于我们”等其他中间页面)使用哪些控制器方法?

任何具体的答案都会比指向http://guides.rubyonrails.org/action_controller_overview.html 等的链接更有用。:) 非常感谢。

【问题讨论】:

    标签: ruby-on-rails list rest controller indexing


    【解决方案1】:

    首先,我认为重要的是要注意“标准方法”在某种意义上既不是标准也不是方法。这些被认为是动作,并且只是标准的,因为它们是与脚手架一起使用的约定。您可以创建任意数量的操作并使用控制器对它们进行逻辑分组。

    如果您打开 [Project]/config/routes.rb 并阅读 cmets,我想您会更好地理解控制器和操作如何映射到特定路由。例如,您可以为登录控制器的登录操作创建一个命名路由,并通过添加到您的 routes.rb 顶部来调用它:

    # ex: http://localhost/authenticate
    map.authenticate 'authenticate', :controller => 'login', :action => 'login'
    # map.[route] '[pattern]', :controller => '[controller]', :action => '[action]'
    
    #  ex: http://localhost/category/1
    map.category 'category/:id', :controller => 'categories', :action => 'list'
    
    # ex: http://localhost/product_group/electronics
    map.search 'product_group/:search', :controller => 'products', :action => 'list'
    

    要部分回答您的问题,您可能需要考虑添加一个类别模型并将所有产品与一个类别相关联。然后,您可以添加一个命名路由来按类别查看项目,如上面的代码块。

    使用命名路由的主要好处是您可以在视图中将它们称为category_urlcategory_path。大多数人不想这样做并依赖默认路由映射(在 routes.rb 的末尾):

     # ex: http://localhost/category/view/1
     map.connect ':controller/:action/:id'
    
     # ex: http://localhost/category/view/1.xml
     # ex: http://localhost/category/view/1.json
     map.connect ':controller/:action/:id.:format'
    

    这里要提到的关键是,当 URI 与路由匹配时,与符号(:id 或 :search)匹配的参数被传递到 params 哈希中。例如,上面名为 route 的搜索会将搜索词匹配到 params[:search],因此如果您的产品有一个您计划搜索的名为“type”的字符串列,您的产品控制器可能如下所示:

    class Products < ApplicationController
      def list
        search_term = params[:search]
        @products = Product.find(:all, :conditions => ["type = ?", search_term])
      end
    end
    

    然后,视图[Project]/app/views/products/list.html.erb 将可以直接访问@products

    如果您真的想深入了解 Ruby on Rails(可能比您发布的链接中的指南容易 10 倍),您应该查看
    Agile Web Development with Rails: Second Edition, 2nd Edition

    【讨论】:

    • 非常感谢吉姆的详细回复。我真的很感激时间。我的部分查询只是术语“列表”和术语“索引”之间的区别。这两者的用法有何不同?
    • 单词之间的区别是偏好问题。 “索引”是从基于文件的 Web 服务器借用的,例如,“index.html”是访问目录时的起点。您可以轻松地将此控制器操作称为“main”、“start”或其他任何内容。我个人只在控制器中使用索引操作,将其映射为 rails 应用程序的根。然后,我尝试确保所有控制器操作都是之后的动词。我的原因是大多数应用程序都会有一个入口点,然后其他所有应用程序都会因为用户操作而触发。
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多