我很欣赏这是一个令人难以置信的noob问题,但谷歌搜索了多个搜索词组合我遗憾地仍然处于黑暗中。当一个人不知道时,这些事情可能很难,而当一个人知道时,这些事情就很明显。
我有半主页,传入的客户可以选择查看查询列表或执行其他一些操作。这不是主页,而是网站内的一种迷你“交换机”。
七种标准的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
任何具体答案都比http://guides.rubyonrails.org/action_controller_overview.html等链接更有用:)非常感谢。
答案 0 :(得分:2)
首先,我认为重要的是要注意“标准方法”在某种意义上既不是标准方法也不是方法。这些被认为是行动,并且只是标准,因为它们是脚手架使用的惯例。您可以创建任意数量的操作,并使用控制器对其进行逻辑分组。
如果你打开 [Project] /config/routes.rb 并阅读评论,我想你会更好地理解控制器和动作如何映射到特定路线。例如,您可以创建一个指向登录控制器登录操作的命名路由,并通过添加到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_url
或category_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