在rails应用程序中,routes.rb有三种主要的路由方式。
一:map.connect
# for routing the admin/customers section
map.connect '/superadmin/user_asset/list_assets', :controller => "superadmin/user_asset",:action=>'list_assets'
map.connect '/superadmin/user_asset/create_asset', :controller => "superadmin/user_asset",:action=>'create_asset'
map.connect '/admin/collections/assign_product', :controller => "admin/collections", :action=>'assign_product'
map.connect '/admin/collections/remove_product', :controller => "admin/collections", :action=>'remove_product'
map.connect '/admin/collections/update_product_list', :controller => "admin/collections", :action=>'update_product_list'
这种路由方式很清晰,第一个参数表示浏览器访问是的相对路径。假设应用程序名称为depot.
则有:
http://127.0.0.1/dept/superadmin/user_asset/list_assets,请求会找到controller:superadmin/user_asset中的list_assets方法。
二:可命名的路由
这种方式除了将map.connect替换成map.****(*表示你自己命名的名称),与创建普通路由没有什么区别。它的主要区别在于当你提供命名路由时,Rails会自动提供两个新的URL方法:****_path和****_url,这两个方法生成指向路由的URL
map.shopping_cart '/cart', :controller => 'order_items'
map.checkout '/checkout', :controller => 'orders', :action => 'new'
map.thank_you "/thank_you", :controller => 'orders', :action => 'thank_you'
map.resources :order_items, :collection => {:update => :put}
在view和controller中,我们可以通过如下方式完成路由
link_to 'Cart',shopping_cart_path()
三:map.resources :exercises(rest方式)
它是第二种方法的推广使用,到了后面你就能明白了。
在routes.rb中调用map.resources代码,Rails就可以生成一整套Rest方式的路由方法。这种方法很容易使人混淆,导致路由混乱。
例子:采用restful_authentication插件(搭建一个用户登录和认证系统),前提是你安装好了这个插件。
运行:
ruby script/generate authenticated user sessions
为应用程序生成两个控制器:Sessions,Users,同时添加UserS模型类,相关视图等。
打开routes.rb文件,
查看:
map.resources :users,:sessions
查看sessions_controller.rb
# This controller handles the login/logout function of the site.
class SessionsController < ApplicationController
# Be sure to include AuthenticationSystem in Application Controller instead
# render new.rhtml
def new
end
def create
self.current_user = User.authenticate(params[:login], params[:password])
if logged_in?
if params[:remember_me] == "1"
current_user.remember_me unless current_user.remember_token?
cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at }
end
redirect_back_or_default('/')
flash[:notice] = "Logged in successfully"
else
render :action => 'new'
end
end
def destroy
self.current_user.forget_me if logged_in?
cookies.delete :auth_token
reset_session
flash[:notice] = "You have been logged out."
redirect_back_or_default('/')
end
end
它负责用户登录和注销功能。
查看view/sessions/new.rhtml文件,它是一个登陆框。
[color=red]<% form_tag sessions_path do -%>[/color]
<p><label for="login">Login</label><br/>
<%= text_field_tag 'login' %></p>
<p><label for="password">Password</label><br/>
<%= password_field_tag 'password' %></p>
<!-- Uncomment this if you want this functionality
<p><label for="remember_me">Remember me:</label>
<%= check_box_tag 'remember_me' %></p>
-->
<p><%= submit_tag 'Log in' %></p>
<% end -%>
注意:红色部分代码,就是说SesionsController中的create方法对应了路由sessions_path.它们都是自动生成的。
Rest默认为一般控制器产生Index,Show,New,Edit,Create,Update,Destroy方法。而通过 map.resources Rails会根据控制器中的方法自动创建所有对应的路由。
分享到:
- 2009-02-02 11:42
- 浏览 1777
- 评论(0)
- 论坛回复 / 浏览 (0 / 2370)
- 查看更多
相关推荐
在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...
在Rails中,可以通过嵌套路由来实现这一功能: ```ruby resources :projects do resources :tasks end ``` 这样的路由配置使得任务成为项目的子资源,从而使得URL结构更加清晰且遵循REST原则。 #### 1.7 其他REST...
在Rails中,REST的核心概念体现在路由(Routes)、控制器(Controllers)、模型(Models)和视图(Views)中: 1. **路由**:Rails的路由系统将URL映射到控制器的行动上,定义了资源的CRUD(Create, Read, Update, ...
- **Rails中的REST实现**:Rails默认遵循REST原则,通过资源路由和标准的控制器动作支持常见的CRUD操作。 - **资源和表示**:讨论如何将数据建模为资源,并如何通过不同的HTTP方法处理这些资源的不同状态。 **4. ...
3. REST、资源和Rails:介绍了REST(Representational State Transfer)架构风格的核心理念,如何在Rails中以资源为中心构建应用,以及Rails中RESTful路由的CRUD(创建、读取、更新、删除)操作。这部分内容还涉及了...
为了确保读者能够通过实践加深理解,书中还安排了一系列练习作业,从最基础的“Hello World”开始,逐步过渡到更复杂的概念,如Rails的Routing(路由)机制。路由机制是Web应用中一个非常核心的概念,它定义了不同的...
在Rails中,表单和链接(Links)的创建也遵循REST原则。例如,`form_for`辅助方法可以轻松创建用于创建和更新资源的表单,而`link_to`则用于生成链接,确保HTTP方法正确。 此外,Rails的ActiveRecord模型提供了强大...
书中还涉及了如何使用Rails的路由帮助方法,如何在路由中加入条件判断,以及如何使用Rails的路由命名空间和作用域来组织代码。 路由系统与Rails的Action Controller紧密相连,Action Controller是Rails中负责处理...
2. **actionpack-2.1.0.gem**:ActionPack是Rails框架中的另一块关键组件,它包括了路由系统、控制器和视图的相关功能。路由系统负责将HTTP请求映射到控制器的特定动作,控制器则处理业务逻辑,并与模型交互,最后由...
Rails鼓励使用REST(Representational State Transfer)架构风格来构建Web应用。RESTful路由允许开发者通过HTTP动词(GET、POST、PUT、DELETE等)来定义资源的操作,使URL更加语义化,提高可读性和可维护性。 **4. ...
2. 路由(Routes)配置:学习如何在Rails中设置路由规则以映射URL到控制器行动。 3. 控制器(Controllers)和动作(Actions):了解如何在Rails中编写控制器来处理HTTP请求,并返回适当的响应。 4. 表单(Forms)和...
5. **路由系统**:Rails的路由系统将URL映射到特定的控制器方法,使得URL设计更加灵活且语义化。 6. **RESTful设计**:Rails鼓励使用REST(Representational State Transfer)架构风格,通过HTTP动词(GET、POST、...
本书分为多个章节,覆盖了Rails 4环境中配置、路由管理、RESTful设计以及控制器操作等核心主题。每个章节都精心设计,确保读者能够系统地学习Rails 4的核心概念和技术细节。 #### 知识点详解 ##### 1. Rails环境和...
REST(Representational State Transfer)是一种软件架构风格,最初由 Roy Fielding 在他的博士论文中提出。它定义了一组构建服务的原则和约束条件,使得客户端和服务端可以通过 HTTP 协议进行交互。在 REST 风格的...
第二章“Rails中的资源应用”,详细解释了使用scaffold命令创建资源的步骤,以及如何实现REST(Representational State Transfer)风格架构。REST架构已成为现代Web开发中的一个核心概念,Rails为实现RESTful服务...
- **嵌套资源**: 分析了如何在路由中表示嵌套关系的资源。 - **路由关注点**: 提出了在设计复杂应用时考虑的不同路由策略。 - **RESTful路由定制**: 介绍了如何根据特定需求定制RESTful路由。 - **仅控制器资源**: ...