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

Ruby form的两种写法

阅读更多

下面介绍Ruby form的两种写法。

Ruby form写法一:使用form_for

  1. <%form_for:order,:url=>{:action=>:save_order}do|form|%>
  2. <p>
  3. <%=label:order,:name,"Name:"%>
  4. <%=form.text_field:name,:size=>40%>
  5. </p>
  6. <p>
  7. <%=label:order,:address,"Address:"%>
  8. <%=form.text_area:address,:rows=>3,:cols=>40%>
  9. </p>
  10. <p>
  11. <%=label:order,:email,"E-Mail:"%>
  12. <%=form.text_field:email,:size=>40%>
  13. </p>
  14. <%=submit_tag"PlaceOrder",:class=>"submit"%>
  15. <%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所说,告诉方法这是一个实例变量。

接下来看看,我们在方法中如何处理。

  1. defsave_order
  2. @cart=find_cart
  3. @order=Order.new(params[:order])
  4. @order.add_line_items_from_cart(@cart)
  5. if@order.save
  6. session[:cart]=nil
  7. redirect_to_index("Thankyouforyourorder")
  8. else
  9. render:action=>:checkout
  10. end
  11. end

如何得到这个实例变量order呢。

只用一句话

  1. @order=Order.new(params[:order])

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

Ruby form写法二:form_tag

  1. <%form_tagdo%>
  2. <p>
  3. <labelfor="name">Name:</label>
  4. <%=text_field_tag:name,params[:name]%>
  5. </p>
  6. <p>
  7. <labelfor="password">Password:</label>
  8. <%=password_field_tag:password,params[:password]%>
  9. </p>
  10. <p>
  11. <%=submit_tag"Login"%>
  12. </p>
  13. <%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里如何处理

  1. deflogin
  2. user=User.authenticate(params[:name],params[:password])
  3. ifuser
  4. session[:user_id]=user.id
  5. redirect_to(:action=>"index")
  6. else
  7. flash.now[:notice]="Invaliduser/passwordcombination"
  8. end
  9. end

这次在页面中因为没有将属性与model绑定,所以也不能像form_for那样,直接生成一个model,但是可以取值。取值时,可以取页面中form的helper方法的第二个参数。

本文转自:http://developer.51cto.com/art/200909/151720.htm

分享到:
评论

相关推荐

    Ruby-SimpleForm轻松处理Rails表单

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

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby-MailForm直接从Rails的表单发送电子邮件支持I18n验证附件和请求信息

    在你的Rails应用的`config/locales`目录下,为每种语言创建一个`.yml`文件,然后在其中定义对应的翻译。 ```yaml # config/locales/en.yml en: activemodel: errors: models: contact_form: attributes: name...

    Ruby-rubybuild编译和安装Ruby

    Ruby是一种动态、开源的编程语言,以其简洁、优雅的语法和强大的元编程能力著称。在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build...

    ruby DBI ruby DBI ruby DBI

    ruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ruby DBIruby DBI ruby DBI ...

    Ruby-rubyinstall安装RubyJRubyRubiniusMagLevorMRuby

    Ruby是一种强大的、面向对象的脚本语言,广泛用于Web开发、服务器端编程和各种应用程序。在Ruby的世界里,管理不同的Ruby实现(如MRI、JRuby、Rubinius、MagLev和MRuby)是非常重要的,这有助于开发者根据项目需求...

    Ruby完全自学手册

    Ruby是一种简洁而功能强大的编程语言,由日本的松本行弘(Yukihiro "Matz" Matsumoto)在1993年开发,并于1995年公开发布。Ruby语言设计之初就非常注重开发人员的编程体验,它拥有自然、表达性强的语法,易于阅读和...

    ruby-2.5.1.tar.gz

    Ruby 是一种通用的、解释的编程语言。 Ruby 是一种真正的面向对象编程语言。 Ruby 是一种类似于 Python 和 Perl 的服务器端脚本语言。 Ruby 可以用来编写通用网关接口(CGI)脚本。 Ruby 可以被嵌入到超文本标记语言...

    Ruby中文文档.zip

    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...

    ruby安装包下载 | ruby环境搭建

    Ruby是一种强大的动态编程语言,广泛应用于Web开发,脚本编写,服务器管理等领域。为了在没有外网连接的环境中搭建Ruby环境,你需要提前下载并准备相关的安装包。在提供的压缩包中,包含了三个关键文件:`ruby-2.7.2...

    Ruby 语言 Ruby 是一种动态、面向对象的脚本语言,具有简洁而富有表现力的语法 以下是 Ruby 语言的一些特点: 简单

    Ruby 是一种纯粹的面向对象语言,几乎所有的操作都是通过对象来完成的。在 Ruby 中,“一切皆为对象”,包括基本的数据类型如整数、字符串等。这种设计使得 Ruby 能够很好地支持类、对象、继承、多态等面向对象的...

    ruby2ruby.zip

    ruby2ruby 提供一些用来根据 RubyParser 兼容的 Sexps 轻松生成纯 Ruby 代码的方法。可在 Ruby 中轻松实现动态语言处理。 标签:ruby2ruby

    Ruby资源ruby-v3.1.1.zip

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程能力而闻名。本资源“ruby-v3.1.1.zip”包含了Ruby的最新版本3.1.1,这是一个重要的里程碑,因为它引入了新特性、性能优化以及对旧...

    ruby语法基础教程

    - **使用集成开发环境(IDE)**:FreeRIDE和SciTE是两个流行的Ruby IDE,提供代码编辑、调试等功能。 - **使用交互式Ruby shell(irb)**:`irb`是一个内置的命令行工具,用于即时测试代码片段和学习Ruby语法。 ###...

    Ruby完全自学手册 下

    《Ruby完全自学手册》是一本完全覆盖Ruby和Ruby on Rails的完全自学手册。《Ruby完全自学手册》的特色是由浅入深、循序渐进,注重理论和实践的结合。虽然定位为入门手册,但是依然涉及许多高级技术和应用,覆盖到的...

    Ruby编程Ruby Programming

    Ruby是一种动态、面向对象的脚本语言,由日本程序员松本行弘(Matz)于1995年设计并发布。它结合了Perl、Smalltalk、Eiffel、Ada以及Lisp等语言的优点,旨在提高开发者的生产力,并且强调代码的可读性和简洁性。 ##...

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    ruby源代码 ruby源代码 ruby源代码 ruby源代码2

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    "Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言的基础以及Rails框架的核心概念。 在Ruby语言中文教程中,你将学到以下关键知识点: 1. **基础语法**:Ruby的语法简洁...

    src-oepkgs/ruby-ruby2ruby

    src-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2rubysrc-oepkgs/ruby-ruby2...

    Ruby 基础语法 视频教程1

    Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称。这个"Ruby基础语法视频教程1"涵盖了几个关键的概念,包括变量、变量规则以及表达式。以下是对这些主题的详细解释: 1. 变量(Variables): 在Ruby中,...

Global site tag (gtag.js) - Google Analytics