`

Rails Recipe实践(one by one) -- In place form editing

阅读更多
要在rails中使用ajax,必须在视图(view)中引用对应的javascript文件,在view文件的< /head>标签中使用<%= javascript_include_tag :defaults %>来引入所有rails自动生成的位于public\script下面的.js文件,也可以使用<%= javascript_include_tag :prototype %>等来引入指定的.js文件,不过为了防止忘记引入,可以把这行代码放到application.rhtml或者某个controller对应的controller_name.rhtml中去。
关于javascript_include_tag的例子
  javascript_include_tag "xmlhr" # =>
    <script type="text/javascript" src="/javascripts/xmlhr.js"></script>

  javascript_include_tag "common.javascript", "/elsewhere/cools" # =>
    <script type="text/javascript" src="/javascripts/common.javascript"></script>
    <script type="text/javascript" src="/elsewhere/cools.js"></script>

  javascript_include_tag :defaults # =>
    <script type="text/javascript" src="/javascripts/prototype.js"></script>
    <script type="text/javascript" src="/javascripts/effects.js"></script>
    ...
    <script type="text/javascript" src="/javascripts/application.js"></script>

现在,就可以使用ajax了,在需要的地方使用in_place_editor_field,由scaffold生成的show.rhtml是一个非常不错的地方,让我们把show.rhtml中的<%=h @contact.send(column.name) %>替换为<%= in_place_editor_field :class_name, :class_attribute %>,让我们看看in_place_editor_field都做了什么,找到它的源代码:
ruby 代码
 
  1. def in_place_editor_field(object, method, tag_options = {}, in_place_editor_options = {})  
  2.  tag = ::ActionView::Helpers::InstanceTag.new(object, method, self)  
  3.  tag_options = {:tag => "span":id => "#{object}_#{method}_#{tag.object.id}_in_place_editor":class => "in_place_editor_field"}.merge!(tag_options)  
  4.  in_place_editor_options[:url] = in_place_editor_options[:url] || url_for({ :action => "set_#{object}_#{method}":id => tag.object.id })  
  5.  tag.to_content_tag(tag_options.delete(:tag), tag_options) +  
  6.  in_place_editor(tag_options[:id], in_place_editor_options)  
  7. end  

当然了,这个代码目前我还看不懂。。。等以后能看懂了再来研究,反正,现在先把它当作是一个具有ajax功能的textbox吧。

为了响应in_form_editor_field的ajax事件,需要在Controller中加入一段代码来自动生成响应时间的action,这段代码如下:

ruby 代码
 
  1. Contact.content_columns.each do |column|  
  2. in_place_edit_for :contact, column.name  
  3. end  

你可以自由的选择把它放到controller的什么位置(只要不放到其他action内部),这段代码使用in_place_edit_for来自动生成了一系列的action,这个魔术是怎么变的呢?马上解开谜底:
ruby 代码
 
  1. def in_place_edit_for(object, attribute, options = {})  
  2.    define_method("set_#{object}_#{attribute}"do  
  3.      @item = object.to_s.camelize.constantize.find(params[:id])  
  4.      @item.update_attribute(attribute, params[:value])  
  5.      render :text => @item.send(attribute)  
  6.    end  
  7.  end  

通过代码,可以一目了然了。

到此为止,我们做完了所有的基础工作,让我们总结一下,为了使用ajax来查看修改字段内容,我们需要经过如下几个步骤:
1.在视图中引入<%= javascript_include_tag :default%>
2.在需要的地方使用in_place_editor_field :class_name,:class_method
3.在controller中使用in_palce_editor_for来自动生成一系列方法
只要三步,ajax就是这么简单。
分享到:
评论
2 楼 9esuLuciano 2008-04-08  
既然用ror最好还是遵循它的原则,否则会给自己添麻烦,如果实在不行,可以覆盖in_place_editor的代码.
1 楼 whku 2008-03-28  
如果說小弟的資料庫沒有id這項 只有NO欄位 如何達成in place edit

相关推荐

    Ajax-Rails-4-AJAX-modal-form-render-JS-response-as-table-row.zip

    Ajax-Rails-4-AJAX-modal-form-render-JS-response-as-table-row.zip,rails 4 ajax模式表单将js响应呈现为表行,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于...

    Edit in place for jRails.

    支持JQuery的Edit In Place Rails插件(rakuto),使用简便轻巧,与大家共享。 例子 ======= # 控制器 class BlogController in_place_edit_for :post, :title end # Customize the action that update the ...

    Ajax-Rails-4-AJAX-Form.zip

    Ajax-Rails-4-AJAX-Form.zip,rails 4 ajax表单示例,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下...

    rails-documentation-1-2-1.zip

    标题 "rails-documentation-1-2-1.zip" 暗示这是一份关于 Ruby on Rails 框架的文档,版本为 1.2.1。Ruby 是一种面向对象的编程语言,而 Rails 是一个基于 Ruby 的开源 Web 应用程序框架,遵循 Model-View-...

    rails-documentation-2-0-2

    rails-documentation-2-0-2

    rails-chm-2-0-2.rar

    `rails-documentation-2-0-2.chm` 文件详细涵盖了这些概念,包含了关于Rails 2.0.2的API参考、教程和指南。通过仔细阅读和实践,开发者能够深入理解Rails的工作原理,并有效地开发出高效、可维护的Web应用。

    rails-documentation-1-2-0-rc1.chm

    rails-documentation-1-2-0-rc1.chm

    Ruby on Rails实践

    此外,Rails的辅助方法如`link_to`和`form_for`,简化了视图中的链接和表单生成。 测试驱动开发(TDD)在Rails中被广泛采用。Rails内置了Test::Unit和RSpec等测试框架,开发者可以通过编写测试先于代码来确保程序的...

    react-rails-form-helpers:用于编写针对Rails的表单的组件

    npm install --save react-rails-form-helpers 通过供应商使用 您可以从获取最新的UMD版本。 关于 该软件包提供了用于编写针对Rails的表单的组件。 该软件包的主要目的是用于通过命名组件传达表单的目的。 如果您对...

    Ruby-SimpleForm轻松处理Rails表单

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

    sclo-ror42-rubygem-rails-html-sanitizer-1.0.3-1.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Rails 3 in Action

    《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...

    rails-rail-in:rails-rail-in 用于查找印度铁路信息,例如火车列表、车站列表、路线、票价、PNR 状态、座位可用性等

    rails-rail-in 用于查找印度铁路信息,例如火车列表、车站列表、路线、票价、PNR 状态、座位可用性等。 安装 要使用 Bundler 安装,请获取最新的稳定版本: gem 'rails-rail-in' , '~&gt; 1.0.0' 要通过 Rubygems ...

    vue-rails-form-b​​uilder:Vue.js的定制Rails表单构建器

    Vue-rails-form-b​​uilder Vue.js的定制Rails表单构建器概要&lt;&#37;= vue_form_for User.new do |f| %&gt; &lt;&#37;= f.text_field :name %&gt;&lt;&#37; end %&gt; &lt; form ... &gt; ... &lt; input v-model =" user....

    redux-form-validators:redux-form-validators

    redux-form-validators 使用redux-form / 简单验证。 受Rails验证的启发。 | | | 安装 npm install redux-form-validators 注意:为了国际化的目的,此软件包与兼容。 演示版 -&gt; FieldLevelValidationForm.js ...

    中文版的Ruby On Rails实践(PDF)

    这个中文版的《Ruby On Rails实践》PDF文档,无疑为中文学习者提供了一条理解这一强大框架的捷径。 Rails的核心理念是“约定优于配置”(Convention Over Configuration),它通过默认设置简化了许多常见的编程任务...

Global site tag (gtag.js) - Google Analytics