`
kaka2008
  • 浏览: 93417 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails中两种form的写法

阅读更多
写法一:使用form_for
 <% form_for :order, :url => { :action => :save_order } do |form| %>
  <p>
   <%= label :order, :name, "Name:" %>
   <%= form.text_field :name, :size => 40 %> 
  </p>
  <p>
   <%= label :order, :address, "Address:" %>
   <%= form.text_area :address, :rows => 3, :cols => 40 %>
  </p>
  <p>
   <%= label :order, :email, "E-Mail:" %>
   <%= form.text_field :email, :size => 40 %>
  </p>
  <%= submit_tag "Place Order" , :class => "submit" %>
<% end %>
 

来看看解释
 
引用

   There are two interesting things in this code. First, the form_for helper on line 1 sets up a standard HTML form. But it does more. The first parameter, : order,tells the method that it’s dealing with an object in an instance variable named @order. The helper uses this information when naming fields and when arranging for the field values to be passed back to the controller.
   The :url parameter tells the helper what to do when the user hits the submit
button. In this case, we’ll generate an HTTP POST request that’ll end up getting
handled by the save_order action in the controller.
 

  而每个form的helper方法,如form.text_area,form_text_field,后面跟的符号,如:name,:address,:email,等都是这个model的属性。form_for后面跟的:order,就如dave所说,告诉方法这是一个实例变量。
  接下来看看,我们在方法中如何处理。
 
   def save_order
    @cart = find_cart
    @order = Order.new(params[:order])
    @order.add_line_items_from_cart(@cart)
    if @order.save
      session[:cart] = nil
      redirect_to_index("Thank you for your order")
    else
      render :action=>:checkout
    end
  end
  

  如何得到这个实例变量order呢。
  只用一句话
 
    @order = Order.new(params[:order])
  

  非常简洁。只要在html.erb页面中配置好。

写法二:form_tag
  <% form_tag do %>
<p>
<label for="name">Name:</label>
<%= text_field_tag :name, params[:name] %>
</p>
<p>
<label for="password">Password:</label>
<%= password_field_tag :password, params[:password] %>
</p>
<p>
<%= submit_tag "Login" %>
</p>
<% end %>

来看解释
引用

  This form is different from ones we’ve seen earlier. Rather than using form_for,it uses form_tag, which simply builds a regular HTML <form>. Inside that
form, it uses text_field_tag and password_field_tag, two helpers that create HTML
<input> tags. Each helper takes two parameters. The first is the name to give
to the field, and the second is the value with which to populate the field. This
style of form allows us to associate values in the params structure directly
with form fields—no model object is required. In our case, we chose to use
the params object directly in the form. An alternative would be to have the
controller set instance variables.

form_tag的写法,没有将属性与model绑定起来,而是直接写属性名。每个helper方法都有两个参数,一个是域的名字,另一个是域的值。
来看在controller里如何处理
  def login
     user = User.authenticate(params[:name], params[:password])
     if user
        session[:user_id] = user.id
        redirect_to(:action => "index" )
     else
        flash.now[:notice] = "Invalid user/password combination"
     end
  end

这次在页面中因为没有将属性与model绑定,所以也不能像form_for那样,直接生成一个model,但是可以取值。取值时,可以取页面中form的helper方法的第二个参数。(这样不又跟jsp有些像了么)
2
0
分享到:
评论

相关推荐

    Ruby-SimpleForm轻松处理Rails表单

    在Ruby on Rails框架中,构建表单是一项常见的任务,而Simple Form gem就是为了简化这一过程而设计的。Simple Form是一款强大的表单构建器,它提供了一种简洁、直观的方式来创建复杂的表单,使得开发者能更专注于...

    rails ajax提交文件或图片

    在Rails框架中,AJAX(Asynchronous JavaScript and XML)是一种常用的技术,用于创建动态和交互式的Web应用程序。AJAX允许页面在不刷新整个页面的情况下与服务器进行通信,从而提高用户体验。在本篇博文中,我们将...

    rails-search-form:一个简单的 Ruby on Rails 应用程序,展示了如何实现搜索表单

    "rails-search-form" 是一个基于 Ruby on Rails 框架的应用程序,它的主要功能是演示如何在 Rails 应用中创建和实现一个搜索表单。这个项目可能是一个教学示例或者代码库,帮助开发者了解如何在实际项目中集成用户...

    rails中使用javascript日期控件

    在Rails中,JavaScript通常通过两种方式引入:内联脚本和外部文件引用。对于WebCalendar.js这样的外部库,我们会在应用程序的`app/assets/javascripts`目录下添加`WebCalendar.js`文件,并在需要使用它的页面中通过`...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    Rails 中mongrel的安装

    Rails是Ruby on Rails框架的简称,它是一种基于Ruby语言的开源Web开发框架,以其MVC(Model-View-Controller)架构而闻名,旨在简化Web应用的开发过程。在早期的Rails版本中,Mongrel是一个常用的HTTP服务器,用于...

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    Ruby On Rails中文教材(PDF)

    4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL。 5. **Scaffolding**:Rails的快速开发工具,能自动生成CRUD(创建、读取、更新、删除)操作的模型、...

    关于rails 3.1 cucumber-rails 1.2.0

    Rails 3.1 和 Cucumber-Rails 1.2.0 是两个在Web开发领域非常重要的工具,尤其对于Ruby on Rails框架的测试和自动化流程。本文将深入探讨这两个组件,以及它们如何协同工作来增强软件开发的效率和质量。 首先,...

    Rails项目源代码

    这个Rails项目提供了学习和研究Web开发的机会,特别是对于Ruby on Rails新手,可以通过阅读和理解源代码来提升技能,了解实际应用中Rails的用法。同时,对于有经验的开发者,这个项目也可以作为一个起点,进行二次...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    rails2-sample

    Ruby on Rails是一种基于Ruby语言的开源Web应用框架,遵循MVC(Model-View-Controller)设计模式。它以其优雅的语法、高效的开发速度以及“约定优于配置”的理念而闻名于世,极大地简化了Web应用的开发过程。此外,...

    好用的rails 2.0 Api 文档

    Rails强调测试驱动开发,内置了Test::Unit和RSpec两种测试框架,便于编写单元测试、集成测试和功能测试,确保代码的质量和稳定性。 **10. 国际化(i18n)** Rails 2.0提供i18n模块,支持多语言应用。通过配置文件,...

    Rails 3 in Action

    1. **Ruby on Rails概述**:Rails是一种基于Ruby语言的开源Web应用框架,遵循“约定优于配置”(Convention over Configuration)和“Don't Repeat Yourself”(DRY)的原则,简化了Web应用开发。 2. **Rails 3.1新...

    Rails

    5. **路由**:Rails的路由系统将URL映射到控制器的行动上,提供了一种灵活的方式来定义和管理应用的路由结构。 描述中提到的博文链接指向了一个ITEYE博客文章,尽管具体内容未提供,但通常这样的博客可能会包含...

    simple_form:简化Rails的表单! 它与简单的DSL绑定,对标记无意见

    rails generate simple_form:install --bootstrap 您必须确保在应用程序上添加了资产的副本。 有关更多信息,请参阅生成器输出,我们的和 。 祖尔布基金会5 要生成与兼容的包装器,请将foundation选项传递给生成...

    敏捷Rails中文教程

    - **起源与发展**:Rails(Ruby on Rails)是由David Heinemeier Hansson创建的一种开源Web应用程序框架,自2004年发布以来迅速获得了全球开发者的关注与支持。Rails的设计理念强调简洁性和生产力,主张“约定优于...

Global site tag (gtag.js) - Google Analytics