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

每天一剂Rails良药之In-Place Form Editing

    博客分类:
  • Ruby
阅读更多
看看蛙眼的博客分类管理,有点In Place Editing的意思,是否让用户感觉更方便呢?
Rails有许多很小的好处,让人欲罢不能。
今天来看看Rails使用script.aculo.us让In Place Editing更简单,让你的应用更加Web2.0

1,新建Rails项目,配好数据库设置
rails test


2,添加contacts表
ruby script/generate migration AddContactsTable

然后修改001_add_contacts_table.rb:
class AddContactsTable < ActiveRecord::Migration
  def self.up
    create_table :contacts do |t|
      t.column :name, :string
      t.column :email, :string
      t.column :phone, :string
      t.column :address_line1, :string
      t.column :address_line2, :string
      t.column :city, :string
      t.column :state, :string
      t.column :country, :string
      t.column :postal_code, :string
    end
  end

  def self.down
    drop_table :contacts
  end
end

然后运行rake:
rake db:migrate


3,生成Contact的scaffold
ruby script/generate scaffold Contact


4,添加默认的javascript库
修改app/views/layouts/contacts.rhtml,添加以下代码:
<%= javascript_include_tag :defaults %>


5,添加In Place Editing效果
修改app/views/contacts/show.rhtml
<% for column in Contact.content_columns %>
<p>
  <b><%= column.human_name %>:</b>
  <%= in_place_editor_field :contact, column.name %>
</p>
<% end %>

<%= link_to 'Back', :action => 'list' %>

注意<%= in_place_editor_field :contact, column.name %>这行代码就可以添加In Place
Editing效果,添加一个Contact并查看Show页面,实际上生成一段Javascript代码:
new Ajax.InPlaceEditor(....)

这里是对Contact所有的字段作In Place Editing,我们也可以只指定某一个字段,如:
<%= in_place_editor_field :contact, :name %>

但是现在还不能编辑字段,因为ContactsController没有相应的set_contact_attr()方法
还好Rails有相应的Convention来节省代码,在ContactsController里添加以下代码:
Contact.content_columns.each do |column|
  in_place_edit_for :contact, column.name
end

这样自动为每个字段生成set_contact_attr()方法了,现在访问页面看看效果吧!

6,更改InPlaceEditor的输入框的样式
参考Rails Framework Documentation的方法API即可
例如这里我们可以让输入框改为5行15列的textarea:
<% for column in Contact.content_columns %>
<p>
  <b><%= column.human_name %>:</b>
  <%= in_place_editor_field :contact, column.name, {}, {:rows => 5, :cols => 15} %>
</p>
<% end %>

<%= link_to 'Back', :action => 'list' %>

或者我们直接更改CSS做更细节上的修改:
.inplaceeditor-form input[type="text"] {
  width: 260px;
}
分享到:
评论
5 楼 jshmemory 2009-02-11  
请教一下,column.human_name 的用法是什么啊??
4 楼 hideto 2008-07-25  
Rails 2.x版本后需要单独安装In Place Editing插件
[url]http://svn.rubyonrails.org/rails//plugins/in_place_editing/ [/url]
3 楼 luodongju325 2008-07-25  
我试了出错:undefined method `出错:undefined method `in_place_edit_for' 是怎么回事?in_place_edit_for' 是怎么回事?
2 楼 shanghaichris 2008-04-03  
为什么我提交表单的时候,被修改的地方就变成了saving...然后刷新,什么都没有被改变?
1 楼 smokingcat 2008-03-20  
但是如果被编辑的字段不是string 或者integer 的话,会出现错误。 undefined method 'size' for XX.XX:float
好像是生成的action method 调用了size函数
而且,此时数据库的数据已经被修改了。

相关推荐

    Ajax-Rails-4-AJAX-Form.zip

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

    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。它用于...

    rails-hackernews-reddit-producthunt-clone, 黑客 news/reddit/social 链接分享网站 用 Rails 构建.zip

    rails-hackernews-reddit-producthunt-clone, 黑客 news/reddit/social 链接分享网站 用 Rails 构建 Rails 上的 Reddit-Hackernews-ProductHunt克隆演示 这是一个 readme.md的Ruby on Rails 应用程序,模仿了 Hacker...

    Agile Web Development with Rails-Second Edition-Beta一书例子

    《Agile Web Development with Rails-Second Edition-Beta》是一本专注于使用Ruby on Rails进行敏捷Web开发的书籍。这本书的第二版beta版提供了关于如何利用Rails框架高效构建动态、响应式网站的深入指导。作者们...

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    Rails,全称Ruby on Rails,是一款基于Ruby语言的开源Web应用程序框架,以其“Don't Repeat Yourself”(DRY)和“Convention over Configuration”(CoC)的原则,深受开发者喜爱。Awesome Rails Gem 是一个广泛...

    Scrum Poker in Rails5, docker-compose

    这个配置会创建一个Rails应用服务、一个PostgreSQL数据库服务和一个Redis服务,确保所有组件正确连接并运行。 总之,结合Rails5和Docker Compose,我们可以构建一个强大的Scrum Poker应用,提供实时的估算讨论环境...

    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 ...

    Ruby-SimpleForm轻松处理Rails表单

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

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证.zip

    rails3-mongoid-devise, 示例 Rails 3.2应用,带有数据 Mongoid,用于验证 Rails 4.1有关设计的Rails 4.1示例应用程序,请参见:rails设计有一个用于设计的教程:Rails 设计教程。类似示例和教程这是来自 RailsApps...

    rails-documentation-2-0-2

    rails-documentation-2-0-2

    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-beginner-s-guide

    rails-beginner-s-guide是Rails 指导手册,帮组学习了解rails开发

    关于rails 3.1 cucumber-rails 1.2.0

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

    Rails管理框架upmin-admin.zip

    upmin-admin 是一个为 Rails 应用开发的开源管理框架。用来管理 Rails 应用中各种对象(如 Model、View 和 Controller )。 标签:upmin

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机.zip

    rails-dev-box, 面向 Ruby on Rails 核心开发的虚拟机 用于 Ruby on Rails 核心开发的虚拟机简介注意:这个虚拟机不是为 Rails 应用程序开发而设计的,只是为。 这个项目自动设置开发环境,以便在 Ruby on Rails ...

Global site tag (gtag.js) - Google Analytics