`
xxrrss
  • 浏览: 43488 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails中的Rest 路由

    博客分类:
  • Ruby
阅读更多
在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会根据控制器中的方法自动创建所有对应的路由。

分享到:
评论

相关推荐

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

    应用Rails进行REST开发

    在Rails中,可以通过嵌套路由来实现这一功能: ```ruby resources :projects do resources :tasks end ``` 这样的路由配置使得任务成为项目的子资源,从而使得URL结构更加清晰且遵循REST原则。 #### 1.7 其他REST...

    使用rails编写REST风格的web应用

    在Rails中,REST的核心概念体现在路由(Routes)、控制器(Controllers)、模型(Models)和视图(Views)中: 1. **路由**:Rails的路由系统将URL映射到控制器的行动上,定义了资源的CRUD(Create, Read, Update, ...

    The Rails 4 Way

    - **Rails中的REST实现**:Rails默认遵循REST原则,通过资源路由和标准的控制器动作支持常见的CRUD操作。 - **资源和表示**:讨论如何将数据建模为资源,并如何通过不同的HTTP方法处理这些资源的不同状态。 **4. ...

    The Rails 5 way 英文原版

    3. REST、资源和Rails:介绍了REST(Representational State Transfer)架构风格的核心理念,如何在Rails中以资源为中心构建应用,以及Rails中RESTful路由的CRUD(创建、读取、更新、删除)操作。这部分内容还涉及了...

    Rails101_by_rails4.0

    为了确保读者能够通过实践加深理解,书中还安排了一系列练习作业,从最基础的“Hello World”开始,逐步过渡到更复杂的概念,如Rails的Routing(路由)机制。路由机制是Web应用中一个非常核心的概念,它定义了不同的...

    RestFul_Rails_Dev_pdf_v_0.1.zip

    在Rails中,表单和链接(Links)的创建也遵循REST原则。例如,`form_for`辅助方法可以轻松创建用于创建和更新资源的表单,而`link_to`则用于生成链接,确保HTTP方法正确。 此外,Rails的ActiveRecord模型提供了强大...

    rails-beginner-s-guide

    书中还涉及了如何使用Rails的路由帮助方法,如何在路由中加入条件判断,以及如何使用Rails的路由命名空间和作用域来组织代码。 路由系统与Rails的Action Controller紧密相连,Action Controller是Rails中负责处理...

    rails本地安装包完整版

    2. **actionpack-2.1.0.gem**:ActionPack是Rails框架中的另一块关键组件,它包括了路由系统、控制器和视图的相关功能。路由系统负责将HTTP请求映射到控制器的特定动作,控制器则处理业务逻辑,并与模型交互,最后由...

    好用的rails 2.0 Api 文档

    Rails鼓励使用REST(Representational State Transfer)架构风格来构建Web应用。RESTful路由允许开发者通过HTTP动词(GET、POST、PUT、DELETE等)来定义资源的操作,使URL更加语义化,提高可读性和可维护性。 **4. ...

    Rails相关电子书汇总二

    2. 路由(Routes)配置:学习如何在Rails中设置路由规则以映射URL到控制器行动。 3. 控制器(Controllers)和动作(Actions):了解如何在Rails中编写控制器来处理HTTP请求,并返回适当的响应。 4. 表单(Forms)和...

    rails-1.0.0

    5. **路由系统**:Rails的路由系统将URL映射到特定的控制器方法,使得URL设计更加灵活且语义化。 6. **RESTful设计**:Rails鼓励使用REST(Representational State Transfer)架构风格,通过HTTP动词(GET、POST、...

    The rails4 way

    本书分为多个章节,覆盖了Rails 4环境中配置、路由管理、RESTful设计以及控制器操作等核心主题。每个章节都精心设计,确保读者能够系统地学习Rails 4的核心概念和技术细节。 #### 知识点详解 ##### 1. Rails环境和...

    RESTful Rails Development

    REST(Representational State Transfer)是一种软件架构风格,最初由 Roy Fielding 在他的博士论文中提出。它定义了一组构建服务的原则和约束条件,使得客户端和服务端可以通过 HTTP 协议进行交互。在 REST 风格的...

    ruby on rails 实践

    第二章“Rails中的资源应用”,详细解释了使用scaffold命令创建资源的步骤,以及如何实现REST(Representational State Transfer)风格架构。REST架构已成为现代Web开发中的一个核心概念,Rails为实现RESTful服务...

    Obie Fernandez, Kevin Faustino, Vitaly Kushner - The Rails 4 Way - 2014

    - **嵌套资源**: 分析了如何在路由中表示嵌套关系的资源。 - **路由关注点**: 提出了在设计复杂应用时考虑的不同路由策略。 - **RESTful路由定制**: 介绍了如何根据特定需求定制RESTful路由。 - **仅控制器资源**: ...

Global site tag (gtag.js) - Google Analytics