专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Ruby教程 » rails:构建 Rails 模型的间的关系 »正文

rails:构建 Rails 模型的间的关系

来源: 发布时间:星期四, 2009年1月8日 浏览:2次 评论:0
  教程需求  学习本教程需要以下技术和资源:

  数据库服务器

  带有 Ruby 支持 NetBeans IDE 6.0

  创建样例数据库  本教程基于教程 10 分钟创建 Ruby Weblog如果您完成了那篇教程那么您可以将完成教程时生成项目作为起点直接进入下否则请您先下载 RubyWebLog.zip 文件然后按照下面步骤创建样例数据库

  注意:本教程使用 MySQL 数据库服务器您可以参考安装和配置 Ruby 支持文以获取有关如何在 Ruby 应用中使用 MySQL 数据库服务器信息该文档同样介绍了如何使用 JavaDB 数据库服务器作为替代

  打开个命令行窗口

  如果 MySQL 数据库服务器尚未被启动请先将其启动

  键入如下命令来创建开发数据库并按“Enter”键mysqladmin -u root -p create rubyweblog_development注意:如果 root 用户不要求密码请省略 -p 参数

  在 IDE 中打开 rubyweblog 项目

  注意:如果是初次打开或者创建 Ruby 项目IDE 会检查您是否有除了绑定 JRuby 软件Software的外其他 Ruby 安装如果有IDE 会显示个对话框询问您选择使用哪个软件Software若您想要使用绑定 JRuby 解释器选择 JRuby;或者您喜欢使用您自己 Ruby 安装那就选择您自己安装更多信息请参考安装和配置 Ruby教程中配置 IDE 使用您自己 Ruby 安装

  如果您数据库要求密码请编缉 database.yml 文件并在开发配置部分中提供密码保存该文件

  要快速访问 database.yml 文件按 Alt+Sht+O(在 Mac 系统中按 Ctrl+Sht+O)在“文件名”文本框中键入 database.yml然后按“Enter”键

  右键点击 rubyweblog 节点选择“迁移数据库”>“到当前版本”

  该操作会更新数据库以加入 posts 表并添加 body 字段 迁移完成时会在“输出”窗口显示

  运行应用并发表篇新文章

  创建评论模型  本教程通过增加允许读者给 blog 文章添加评论功能扩充 rubyweblog 项目首先要创建评论模型来存储读者评论例子而此项目中已经有了存储 blog 文章例子文章模型

  在“项目”窗口中展开“rubyweblog”节点右键点击“Models”节点然后选择“Generate”

  在“Arguments”字段中键入 Comment post_id:eger created_at:datetime comment:text然后点击“OK”

  “Rails Generator”会创建个名为“Comment”模型该模型包含如下文件:

  app/models/comment.rb 存有评论模型思路方法文件此文件已在编辑区中打开

  test/unit/comment_test.rb 用于检测模型单元测试

  test/fixtures/comments.yml 用于填充模型测试套件

  db/migrate/migrate/003_create_comments.rb 更改数据库结构迁移文件 该文件版本为003这是项目已经有了两个迁移文件:001_create_posts.rb 和 002_add_body.rb他们用于创建和修改 posts 表

  迁移数据库  接下来要处理文件就是迁移文件 003_create_comments.rb 了

  在“输出”窗口中点击 003_create_comments.rb 文件链接

  文件打开后会显示 self.up 思路方法(创建 comments 表)和 self.down 思路方法(删除 comments 表)如下列代码举例所示:   代码举例 1:comments 表迁移代码

CreateComments < ActiveRecord::Migration
 def self.up
  create_table :comments do |t|
   t.column :post_id, :eger
   t.column :created_at, :datetime
   t.column :comment, :text
  end
 end
 def self.down
  drop_table :comments
 end
end


  此段迁移代码会创建张含有 4 个字段 comments 表:id整数;post_id整数;created_at存储日期时间;comment文本描述

  右键点击 rubyweblog 节点选择“迁移数据库”>“到当前版本”

  该操作会更新数据库以加入 comments 表 迁移完成时会在“输出”窗口显示

  定义评论模型和文章模型的间关系  应用目前有两个模型:文章模型发表篇新 blog 文章而评论模型则向篇 blog 文章添加条评论现在给两个模型的间定义关系 使得条评论关联篇文章篇文章可以包含多条评论

  展开“Models”节点打开 post.rb

  在 post.rb 中添加如下 has_many 关联:

  代码举例 2:post.rb 中 has_many 关联

Post < ActiveRecord::Base
 validates_presence_of :title, :body
 has_many :comments
end


  has_many 思路方法表明文章可以有 0 个、1 个或者多个评论记录和的关联

  小贴士: 键入触发器 hm后按 Tab 键可以扩展成代码模板 has_many :objects

  打开“Models”> comment.rb然后添加 belongs_to 关联:

  代码举例 3:comment.rb 中 belongs_to 关联

Comment < ActiveRecord::Base
 belongs_to :post
end


  belongs_to 思路方法表明条评论只能和篇文章相关联ActiveRecord 默认使用 post_id来将条评论和有相应 post.id 文章进行关联

  小贴士:bt 触发器能扩展成 belongs_to :object

  修改控制器脚手架  接下来处理控制器blog_controller.rb它能生成用于在 blog 文章中创建、读取、更新和删除条目脚手架或者基本接口

  展开“Controllers”节点打开 blog_controller.rb

  控制器拥有所有脚手架动作包括 index、list、show、、create、edit、update 和 destroy

  如下面代码举例所示修改 show 动作将 post_id 保存到 flash 中:

  代码举例 4:show 动作

def show
 @post = Post.find(params[:id])
 flash[:post_id] = @post.id
end


  此段代码查找和请求中所传参数 id 相关联文章然后把 id 存放到 flash 中以备后用flash 类似于 HTTP 会话但可以跨越单个请求当在 flash 中放入个物品时该物品对下个请求可用但然后就消失了(因此使用术语“flash”称的)

  滚动至 blog_controller.rb 文件结尾处然后在最后 end 语句前添加如下 post_comment 动作:

  代码举例 5:post_comment 动作

def post_comment
  @comment = Comment.(
   "post_id" => flash[:post_id],
   "created_at" => Time.now,
   "comment" => params[:comment]['comment']
   )
    @comment.save
    flash[:notice] = 'Comment was successfully added.'
    redirect_to :action => 'show', :id => flash[:post_id]
   end
end


  当用户点击“Post”按钮提交评论时就会 post_comment 动作此段代码段从 flash 中获取 post_id(1, 2, ...)并使用该 id 查找和的相关联 blog 文章紧接着代码会创建个新评论对象来关联该 post_id组成部分还包括创建时间和实际评论Rails 框架把从页面提交参数作为散列来传递(params[:comment])通过该散列码能够取出评论参数(params[:comment]['comment'])

  由于评论(Comment)是个 ActiveRecord 类其 save 思路方法可以将评论记录保存到数据库中接着把成功保存记录消息放到 flash 中代码然后 show 动作载入 show.rhtml 页面该页面将重新载入文章和和它相关所有评论包括新添加那条

  修改视图以添加评论  编缉 show.rhtml 文件显示单独 blog 条目

  展开“Views”> blog然后打开 show.rhtml

  在 show.rhtml 文件末尾添加下列代码:

  代码举例 6:show.rhtml 所需代码

<hr>
<h4>Comments</h4>
<% form_tag :action => 'post_comment' do %>
  <p><label for="comment_comment">Comment</label><br/>
  <%= text_area 'comment', 'comment' %></p>
  <%= submit_tag "Post" %>
<%end %>


  此段代码产生个表单包括个用于编写评论文本输入区个标识为 Post 提交按钮如图 1 所示表单提交时会 post_comment 动作

  保存文件然后运行应用

  点击“Permalink”查看 blog 条目详细信息 试着在文本区添加条评论但是请留意当点击“Post”按钮时 blog 还不能显示评论

  如果您提交成功了您可以看到视图顶部会有条消息如下图所示后面几个步骤我们将添加代码来收集并显示这些评论

  图 1:没有显示评论评论模型视图





相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: