- 浏览: 248791 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (237)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (1)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
1. 构建多模型表单
现在的博客一般都有便签功能, 方便读者通过关键字索引文章. 要实现该特性你的应用需要在一个表单中交互多个模型. 那么这时候Rails提供了另一个重要的功能: 嵌套表单
为了展示, 我们将为post的多标签提供支持. 首先, 我们需要为标签创建模型:
$ rails g model tag name:string post:references
然后:
$ rake db:migrate
接下来, 编辑post.rb建立另一半关联, 并告诉rails你需要通过posts来编辑tags:
- class Post < ActiveRecord::Base
- validates :name , :presence => true
- validates :title , :presence => true ,
- :length => { :minimum => 5 }
- has_many :comments , :dependent => :destroy
- has_many :tags #实际上对于标签来说应该是一个多对多的关联, 为了方便教程我在这里使用一对多关系
- accepts_nested_attributes_for :tags , :allow_destroy => :true ,
- :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
- end
:allow_destroy 告诉rails在视图上显示一个移除复选框, 而 :reject_if 将会阻止任何空属性的标签的保存.
现在我们修改 views/posts/_form.erb 模板来加入tag:
- < % @post.tags.build % >
- < %= form_for(@post) do |post_form| % >
- < % if @post.errors.any? % >
- < div id = "error_explanation" >
- < h2 > < %= pluralize(@post.errors.count, "error") % > prohibited this post from being saved: </ h2 >
- < ul >
- < % @post.errors.full_messages.each do |msg| % >
- < li > < %= msg % > </ li >
- < % end % >
- </ ul >
- </ div >
- < % end % >
- < div class = "field" >
- < %= post_form.label :name % > < br />
- < %= post_form.text_field :name % >
- </ div >
- < div class = "field" >
- < %= post_form.label :title % > < br />
- < %= post_form.text_field :title % >
- </ div >
- < div class = "field" >
- < %= post_form.label :content % > < br />
- < %= post_form.text_area :content % >
- </ div >
- < h2 > Tags </ h2 >
- < %= render :partial = > "tags/form", :locals = > { :form = > post_form} % >
- < div class = "actions" >
- < %= post_form.submit % >
- </ div >
- < % end % >
现在我们把 form_for @post do |f| 改为 |psot_form| 使之更容易理解.
本示例显示了 render方法的另一个参数 :locals 它可以传递局部变量, 在这里我们希望 form 变量映射为 post_form 对象.
同时我们还在开始处初始化一个tag对象. (试试取消该行会发生什么)
现在创建文件夹 views/tags/ 然后在里面添加一个 _form.erb 局部模板:
- < %= form.fields_for :tags do |tag_form| % >
- < div class = "field" >
- < %= tag_form.label :name, 'Tag:' % >
- < %= tag_form.text_field :name % >
- </ div >
- < % unless tag_form.object.nil? || tag_form.object.new_record? % >
- < div class = "field" >
- < %= tag_form.label :_destroy, 'Remove:' % >
- < %= tag_form.check_box :_destroy % >
- </ div >
- < % end % >
- < % end % >
同样, 请留意下tags表单生成的html代码.
最后, 我们编辑show.html.erb来显示这些tags:
- < p class = "notice" > < %= notice % > </ p >
- < p >
- < b > Name: </ b >
- < %= @post.name % >
- </ p >
- < p >
- < b > Title: </ b >
- < %= @post.title % >
- </ p >
- < p >
- < b > Content: </ b >
- < %= @post.content % >
- </ p >
- < p >
- < b > Tags: </ b >
- < %= @post.tags.map { |t| t.name }.join(", ") % >
- </ p >
- < h2 > Comments </ h2 >
- < %= render @post.comments % >
- < h2 > Add a comment: </ h2 >
- < %= render "comments/form" % >
- < %= link_to 'Edit Post', edit_post_path(@post) % > |
- < %= link_to 'Back to Posts', posts_path % > |
现在你可以直接在创建或编辑post页面中添加或删除tags了.
不过 @post.tags.map { |t| t.name }.join(", ") 感觉不是那么友好, 我们可以通过帮助器来改变.
2. 视图帮助器
视图帮助器位于 app/helpers, 可以提供一些可重用的视图代码片段. 在这里, 我们需要把所有tags的名称连起来并用逗号隔开, 由于它位于Posts视图, 那么我们可以在 PostsHelper 中实现:
- module PostsHelper
- def join_tags(post)
- post.tags.map { |t| t.name }.join(", " )
- end
- end
然后把上面的 <%= @post.tags.map { |t| t.name }.join(", ") %> 改为:
<%= join_tags @post %>
发表评论
-
OpenSSL功能集合
2020-04-22 18:59 435OpenSSL中算法记录 1、证书(X.509证书 ... -
Aliyun-OSS 使用 - 图片持久化
2020-03-03 13:04 537Aliyun OSS 使用 - 图片持久化 参考:ali ... -
Sign in with Apple REST API (Rails)
2020-02-28 12:30 1099# 文档(Apple授权登录) https://deve ... -
RQRCode插件使用
2019-03-07 15:08 318def config { le ... -
gems 列表(rails 插件) 二
2014-11-19 19:41 489rails_best_practices 最佳实现 new ... -
rails 利用 Spreadsheet 导出xls格式数据
2014-10-08 17:22 7131、链接 XXX_path(forma ... -
rvm 使用记录
2014-09-26 11:11 606rvm是一个命令行工具,可以提供一个便捷的多版本ruby环 ... -
rails3内置gem包
2014-09-10 13:14 498rails3内置gem包: ... -
rails mongoid + carrierwave
2014-06-13 18:11 645中间插件:gem 'carrierwa ... -
rails 错误提示样式
2014-06-11 10:20 517源码 # Specify the proc us ... -
ROR Callbacks函数
2014-05-13 16:49 481Active Record Callbacks: ## ... -
字符串与对象的转化
2014-03-06 10:51 691classify: http://apidock.com/ ... -
nginx+unicorn+rails 配置文件
2014-02-17 14:43 625nginx+unicorn+rails 配置文件 ... -
ruby 里的正则表示
2014-01-22 17:27 0# ruby 中的正则表示 ... -
rails中Elasticsearch的客户端Tire配置
2014-01-22 15:25 1167$ gem install tire || http ... -
rails 多表关联
2013-12-09 16:28 0rails 多表关联 class Post < ... -
rails 测试 Rspec
2013-11-14 13:32 0在Gemfile中加入: group :test, ... -
rails 评论/回复插件 acts_as_commentable_with_threading
2013-11-13 19:04 1219acts_as_commentable_with_thre ... -
rails Rspec测试框架
2013-11-03 17:46 645Rspec rails的测试框架 ... -
rails 配置详解
2013-09-16 17:05 1247配置文件(config) 在Rails中,可以 ...
相关推荐
在"Ruby on Rails入门例子"中,我们可能会遇到以下关键概念: - **路由(Routes)**:Rails的路由系统将URL映射到特定的控制器动作,定义了应用的导航结构。在`config/routes.rb`文件中配置路由规则。 - **生成器...
Ruby on Rails拥有庞大的开发者社区,提供了丰富的教程、插件和库。Stack Overflow、GitHub、RailsGuides和RailsCasts等资源对初学者和高级开发者都非常有帮助。 以上只是Ruby on Rails的部分基础知识,实际开发中...
《基于Ruby On Rails的在线购书系统》是一个深入探讨如何利用Ruby on Rails框架构建电子商务平台的项目。Ruby on Rails(RoR)是一个开源的Web应用框架,它遵循MVC(模型-视图-控制器)架构模式,以Ruby编程语言为...
Ruby on Rails 是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,使得开发者可以高效地构建功能丰富的Web应用程序。在这个“Ruby on Rails博客程序”中,我们将深入探讨如何在...
Ruby on Rails,简称RoR,是一款基于Ruby编程语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率,同时保持代码的简洁和可读性。RoR的核心理念是“Don't Repeat Yourself”(DRY)...
### Ruby on Rails 2.1 新特性详解...以上就是Ruby on Rails 2.1版本的一些主要新特性和改进之处。这些更新不仅提升了开发效率,还增强了应用的功能性和稳定性,对于正在使用Rails进行开发的团队来说是非常值得升级的。
通过这个Ruby on Rails博客制作的例子,你不仅学会了如何构建一个基本的Web应用,还对Rails的MVC架构、数据库操作、路由设计、表单处理、测试和部署有了深入的理解。这是一个很好的起点,随着你对Rails的深入学习,...
Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,极大地简化了Web应用开发。API(Application Programming Interface)是Rails提供的一种允许...
这个简单的blog项目是初学者了解Rails的好起点,通过实践,可以掌握Rails的基本用法,进一步深入学习数据库操作、模板引擎、路由、控制器以及测试等方面的知识,为成为Ruby on Rails开发大师打下坚实基础。
“lina, An amazing RESTful API provider based on Ruby on Rails( Not maintained ).zip” 这个标题提到了一个名为“lina”的项目,它是一个基于Ruby on Rails构建的RESTful API服务提供商。RESTful API是Web服务...
Ruby on Rails,简称RoR,是一款基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。RoR强调“DRY”(Don't Repeat Yourself)原则和“Convention ...
Ruby on Rails 是一个使用Ruby语言编写的开源Web应用框架,其设计宗旨是使得开发Web应用更为快速和简洁。它基于著名的模型-视图-控制器(MVC)架构模式,旨在以更少的代码实现更多功能,提高开发效率。Ruby on Rails...
Ruby 是一种面向对象的、动态类型的编程语言,而 Rails 是一个基于 MVC(模型-视图-控制器)架构的 Web 开发框架,它极大地简化了 Web 应用程序的构建过程。 在 Ruby 1.8.7 版本中,一些关键特性包括: 1. 全局变量...
《构建动态Web 2..0网站:使用Ruby on Rails》不仅是一本介绍Ruby on Rails基础知识的书籍,更是一部深入探讨Web 2.0时代下如何利用这一强大框架构建高效、安全、高性能的动态网站的实用指南。对于希望学习或深化...
在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...
### Web开发:深入理解Ruby on Rails #### 一、引言与概述 Ruby on Rails (简称Rails) 是一种用于Web开发的开源框架,基于Ruby语言。Rails的设计理念强调程序员的生产力和代码的简洁性,因此它成为了Ruby语言的...
《Ruby on Rails打造企业级RESTful API项目实战——我的云音乐》是一本深入探讨如何使用Ruby on Rails框架构建高效、可扩展的企业级API服务的实战教程。Ruby on Rails(简称Rails)是基于Ruby语言的开源Web开发框架...