- 浏览: 250256 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (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中使用单数形式,而其相关的数据库将使用复数名称。
那么对于一个博客来说,评论总是少不了的,我们现在就要创建一个 Comment 模型。对于大多数的 rails 程序员来说,一般都是通过rails的生成器来生成模型,在这里我们也一样:
$ rails g model comment commenter:string body:text post:references
该命令将创建4个文件:
- app/models/comment.rb – 模型
- db/migrate/20101128142329_create_comments.rb – 迁移文件
- test/unit/comment_test.rb and test/fixtures/comments.yml – 测试文件.
首先,我们看一下 comment.rb
- class Comment < ActiveRecord::Base
- belongs_to :post
- end
初看之下,你可能会觉得它与post模型很相识,不同之处在于它多了一行 belongs_to 声明,而这将会建立它与post模型之间的关联, 那么在后面的教程中我们将详细学习。
同时,Rails还生成了迁移文件来创建相应的表:
- class CreateComments < ActiveRecord::Migration
- def self .up
- create_table :comments do |t|
- t.string :commenter
- t.text :body
- t.references :post
- t.timestamps
- end
- end
- def self .down
- drop_table :comments
- end
- end
与之前的rails版本不同,这里多了一个 t.references 定义。t.references :post 将建立一个posts表的外键 post_id, 值得注意的是这里的 :post 指的模型而不是表,这点一定要搞清楚。
现在运行迁移操作把:
$ rake db:migrate
2. 关联模型
Active Record的关联让你很容易的声明模型之间的关系。对于Posts和Comments, 很明显是一对多的关系。
前面rails已经为我们声明了 belongs_to 关系,现在我们需要再声明一个 has_many 关系, 打开 post.rb 然后添加下面一行:
- class Post < ActiveRecord::Base
- validates :name , :presence => true
- validates :title , :presence => true ,
- :length => { :minimum => 5 }
- has_many :comments
- end
现在双方都已经建立起一系列的关系,打个比方,假如你有一个实例变量 @post 包含一条 post,那么你可以使用 @post.comments 来检索所有该 post 中的 comment。
3. 为comments添加路由
和home控制器一样,我们需要添加一条路由,这样rails可以知道哪里可以看到评论。再次打开 routes.rb 你可以看到上次手脚架自动给posts添加的路由条目,我们编辑下该条目:
- resources :posts do
- resources :comments
- end
4. 生成控制器
模型有了,现在你需要创建comments控制器了,同样我们使用生成器来创建该控制器:
$ rails g controller comments
与任何博客一样,我们的读者将在他们阅读文章后直接添加评论,一旦完成评论的添加,他们将跳转到post的show页面,所以,我们的CommnetsController仅需提供创建以及删除垃圾评论的方法即可。
首先,我们修改下post的show.html.erb模板使之可以创建与显示评论:
- < 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 >
- < h2 > Add a comment: </ h2 >
- < %= form_for([@post, @post.comments.build]) do |f| % >
- < div class = "field" >
- < %= f.label :commenter % > < br />
- < %= f.text_field :commenter % >
- </ div >
- < div class = "field" >
- < %= f.label :body % > < br />
- < %= f.text_area :body % >
- </ div >
- < div class = "actions" >
- < %= f.submit % >
- </ div >
- < % end % >
- < %= link_to 'Edit Post', edit_post_path(@post) % > |
- < %= link_to 'Back to Posts', posts_path % > |
这将在post的show页面中显示一个comment表单来创建评论,而这将调用CommentsController中的create方法,如下:
- class CommentsController < ApplicationController
- def create
- @post = Post.find(params[ :post_id ])
- @comment = @post .comments.create(params[ :comment ])
- redirect_to post_path(@post )
- end
- end
你可能会发现这里要比之前的posts控制器中稍微复杂一些,这就是你之前设定嵌套的片效应。每一个评论的请求需要追踪该评论所附加的Post,所以find首先会找出该Post对象。
接下来,代码调用了关联中存在的方法,我们在这里使用create方法来创建并保存该条评论,这将自动关联到对应的post记录。
一旦我们完成了评论的保存,我们就要使用 post_path @post
把用户跳转到原来显示该post的show页面。正如我们所看到的,它调用了PostsController中的show方法来渲染
show.html.erb 模板。这里我们需要显示所有关于该Post的评论,所以让我们更改下 show.html.erb 页面:
- < 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 >
- < h2 > Comments </ h2 >
- < % @post.comments.each do |comment| % >
- < p >
- < b > Commenter: </ b >
- < %= comment.commenter % >
- </ p >
- < p >
- < b > Comment: </ b >
- < %= comment.body % >
- </ p >
- < % end % >
- < h2 > Add a comment: </ h2 >
- < %= form_for([@post, @post.comments.build]) do |f| % >
- < div class = "field" >
- < %= f.label :commenter % > < br />
- < %= f.text_field :commenter % >
- </ div >
- < div class = "field" >
- < %= f.label :body % > < br />
- < %= f.text_area :body % >
- </ div >
- < div class = "actions" >
- < %= f.submit % >
- </ div >
- < % end % >
- < br />
- < %= link_to 'Edit Post', edit_post_path(@post) % > |
- < %= link_to 'Back to Posts', posts_path % > |
现在你可以在你的博客中添加post和评论了,并且把它们显示在正确的地方。
发表评论
-
OpenSSL功能集合
2020-04-22 18:59 444OpenSSL中算法记录 1、证书(X.509证书 ... -
Aliyun-OSS 使用 - 图片持久化
2020-03-03 13:04 545Aliyun OSS 使用 - 图片持久化 参考:ali ... -
Sign in with Apple REST API (Rails)
2020-02-28 12:30 1105# 文档(Apple授权登录) https://deve ... -
RQRCode插件使用
2019-03-07 15:08 326def config { le ... -
gems 列表(rails 插件) 二
2014-11-19 19:41 491rails_best_practices 最佳实现 new ... -
rails 利用 Spreadsheet 导出xls格式数据
2014-10-08 17:22 7181、链接 XXX_path(forma ... -
rvm 使用记录
2014-09-26 11:11 613rvm是一个命令行工具,可以提供一个便捷的多版本ruby环 ... -
rails3内置gem包
2014-09-10 13:14 505rails3内置gem包: ... -
rails mongoid + carrierwave
2014-06-13 18:11 651中间插件:gem 'carrierwa ... -
rails 错误提示样式
2014-06-11 10:20 521源码 # Specify the proc us ... -
ROR Callbacks函数
2014-05-13 16:49 482Active Record Callbacks: ## ... -
字符串与对象的转化
2014-03-06 10:51 701classify: http://apidock.com/ ... -
nginx+unicorn+rails 配置文件
2014-02-17 14:43 629nginx+unicorn+rails 配置文件 ... -
ruby 里的正则表示
2014-01-22 17:27 0# ruby 中的正则表示 ... -
rails中Elasticsearch的客户端Tire配置
2014-01-22 15:25 1170$ 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 1224acts_as_commentable_with_thre ... -
rails Rspec测试框架
2013-11-03 17:46 649Rspec rails的测试框架 ... -
rails 配置详解
2013-09-16 17:05 1248配置文件(config) 在Rails中,可以 ...
相关推荐
在"Ruby on Rails入门例子"中,我们可能会遇到以下关键概念: - **路由(Routes)**:Rails的路由系统将URL映射到特定的控制器动作,定义了应用的导航结构。在`config/routes.rb`文件中配置路由规则。 - **生成器...
本书主要针对的是希望学习Ruby on Rails框架的读者,特别是那些想要从零开始掌握这项技术的新手。 #### 二、作者介绍与背景 - **作者**: xdite,一位经验丰富的开发者,专注于Ruby on Rails框架。 - **作品**: ...
**Ruby on Rails(RoR)** 是一个基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,用于构建高效、简洁和可维护的Web应用。RailsGuides中的"blog"程序是一个典型的入门级示例,旨在帮助初学...
8. **Ruby on Rails框架**:虽然标题没有明确提及,但`hello_rails-master`这个文件名暗示了你可能接触的是Rails,它是Ruby的一个Web开发框架。你将学习到MVC(模型-视图-控制器)架构,路由,数据库交互...
2. **Ruby on Rails框架**:Ruby博客系统很可能使用了Ruby on Rails,这是一个流行的Web开发框架,它遵循MVC(模型-视图-控制器)架构模式。Rails提供了许多便利的功能,如ActiveRecord用于数据库操作,Action...
- **定义**:Ruby on Rails(简称 Rails 或 RoR)是一种用于快速开发 Web 应用程序的模型-视图-控制器(MVC)框架,由David Heinemeier Hansson创建。 - **特点**:Rails强调代码的简洁性和开发效率,遵循“约定优于...
【Rails入门博客应用程序】是一个基于Ruby编程语言的Web应用程序示例,主要展示了如何使用Ruby on Rails框架构建一个简单的博客系统。Ruby on Rails(简称Rails)是用于构建动态、交互式网站的开源框架,它遵循MVC...
Ruby on Rails(简称Rails)是一个流行的开源Web应用框架,它遵循“模型-视图-控制器”(MVC)架构模式,使得构建动态、数据驱动的网站变得更加高效。 在Ruby on Rails中,"模型"负责处理数据和业务逻辑,"视图"负责...
Ruby编程语言介绍 Ruby是一种面向对象的、动态类型的编程语言...Ruby on Rails框架则为构建Web应用提供了高效的工具和实践,促进了敏捷开发。通过不断学习和实践,你可以掌握Ruby编程,从而在IT行业中发挥出它的潜力。
- **Ruby on Rails: Up and Running**:适合初学者快速入门 Rails 框架。 - **Web Services on Rails**:专门讨论在 Rails 应用中集成 Web 服务的技术和实践。 此外,O'Reilly 提供了丰富的在线资源和服务,如 ...
Ruby是一种面向对象的、动态且易于学习的编程语言,而Ruby on Rails(简称Rails)是建立在Ruby之上的一个开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,使开发过程更高效。 在这个"入门"阶段,学生将...
MVC模式是一种软件架构模式,最初由Trygve Reenskaug在1970年代基于Smalltalk社区的工作提出,后来随着2003年Ruby on Rails框架的兴起而变得流行起来。MVC模式的核心思想是将应用程序分为三个主要部分: 1. **Model...
- Ruby on Rails是一种基于Ruby语言的Web开发框架,以其简洁性和开发效率著称。 - 学习Ruby语言基础,掌握Rails框架的核心概念,如ActiveRecord ORM。 ### 结论 学习Android开发是一个长期的过程,需要不断积累...
在某种程度上,CakePHP可以被看作是PHP世界里的“Ruby on Rails”,它强调的是代码自动生成、约定优于配置的原则,以及减少样板代码的编写。 #### 二、环境搭建与配置 ##### 2.1 下载与安装 1. **下载最新版本**...
- **吸取的经验教训**:Grails借鉴了Ruby on Rails的成功经验,同时结合Java生态系统的优点,为开发者提供了一种高效、灵活且易于使用的开发方式。 **1.5 使用Grails的原因** - **生产力高**:Grails通过减少代码...