`
neverfail
  • 浏览: 2799 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

用rails做个简单的论坛(三):将之前的串连起来

阅读更多
前面介绍的只是一个大概的框架,没有完全串连起来。比如发了主题没有内容等。
一、发表主题时同时添加内容
1、修改rhtml,添加post 的字段。
2、修改controller,创建主题的同时添加post的内容,并修改该板块的相关属性,比如主题数+1,文章数+1,最新发表的post等。(不知这样写会不会太难看) :
ruby 代码
  1. def create       
  2.     user = User.find(session[:user_id])       
  3.     board = Board.find(params[:board_id])       
  4.     @topic = Topic.new(params[:topic])       
  5.     @topic.board = board       
  6.     @post = Post.new(params[:post])       
  7.     @post.user = user       
  8.     @topic.posts << @post      
  9.     @topic.post = @post      
  10.     @topic.user = user       
  11.     @topic.init       
  12.       
  13.     respond_to do |format|       
  14.       Topic.transaction do      
  15.         @topic.save!       
  16.         @post.save!       
  17.         board.update_attributes!(:topic_count=>board.topic_count+1,:post_count=>board.post_count+1, :post=>@post)       
  18.         flash[:notice] = 'Topic was successfully created.'       
  19.         format.html { redirect_to post_url(@topic@post) }       
  20.         format.xml  { head :created:location => post_url(@topic@post) }       
  21.       end      
  22.     end      
  23.     rescue ActiveRecord::RecordInvalid => e       
  24.       respond_to do |format|       
  25.         format.html { render :action => "new" }       
  26.         format.xml  { render :xml => @topic.errors.to_xml }       
  27.       end      
  28.   end  

二、回复帖子:在posts/index.rhtml下添加快速回复,也就是将 new.rhtml 的代码复制进来。
post_controller.rb 修改,除了增加回复外,板块与主题也要做相关的update:
ruby 代码

  1. def create
      topic = Topic.find(params[
    :topic_id])       
  2.   @post = Post.new(params[:post])       
  3.   @post.topic = topic       
  4.   @post.user = User.find(session[:user_id])       
  5.   board = topic.board       
  6.          
  7.   respond_to do |format|       
  8.     Post.transaction do      
  9.       @post.save!       
  10.       topic.update_attributes!(:post_count=>topic.post_count+1, :post=>@post)       
  11.       board.update_attributes!(:post_count=>board.post_count+1, :post=>@post)       
  12.       flash[:notice] = 'Post was successfully created.'       
  13.       format.html { redirect_to post_url(@post.topic, @post) }       
  14.       format.xml  { head :created:location => post_url(@post.topic, @post) }       
  15.     end      
  16.   end      
  17.   rescue ActiveRecord::RecordInvalid => e       
  18.     respond_to do |format|       
  19.       format.html { render :action => "new" }       
  20.       format.xml  { render :xml => @post.errors.to_xml }       
  21.     end      
  22. end  

三、为列表分页,主要是参考了http://www.igvita.com/blog/2006/09/10/faster-pagination-in-rails/ 的来做,但不知为什么topic的有点问题,只能特意为它搞了个partial。

四、ajax效果:像javaeye里的一样,点击板块里最近发表的连接,可以定位到该回复,并有高亮效果(抄了javaeye的,呵呵)。主要修改了post controller的show 和 index.rhtml、show.rhtml(请看附件)

这样,好像整个都基本完成了,也没什么具体的感觉,就是不知道是不是这样去做,匆匆忙忙写完,才发现基本都没什么条理,想到什么就写什么。不知大家在学习和开发中是怎样做的。
另外完善的话,还要加上rich editor,单元测试还没有。。。。还有很多!

ruby 代码
  1. def show          
  2.     @topic = Topic.find(params[:topic_id])          
  3.     count = @topic.posts.count(:conditions => "id 小于等于 #{params[:id]}");          
  4.     page = (count-1)/10 + 1          
  5.     @posts = @topic.posts.find(:all:page=>{:size=>10, :current=>page})          
  6.     @post = Post.find(params[:id])          
  7.     respond_to do |format|          
  8.       format.html # show.rhtml          
  9.       format.xml  { render :xml => @post.to_xml }          
  10.     end         
  11.   end   
  • bbs.zip (225.9 KB)
  • 下载次数: 38
分享到:
评论

相关推荐

    Rails的精简版本Rails::API.zip

    Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    在本篇内容中,我们将深入探讨如何利用Ruby on Rails(简称Rails)这一强大的Web应用程序框架来构建可伸缩且易于维护的RESTful API。Rails以其简洁优雅的语法、高效的开发速度以及良好的社区支持而闻名,这使得它...

    Rails中应用Ext.tree:以中国的省市地区三级联动选择为例

    这篇博客文章“Rails中应用Ext.tree:以中国的省市地区三级联动选择为例”提供了一个实用的示例,教我们如何利用Ext.js库中的Tree组件来实现这种功能。 首先,让我们了解Rails和Ext.js的基本概念。Rails是基于Ruby...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **步骤**:通过命令行使用`rails new project_name`来初始化一个新的Rails项目。 - **结构**:新项目将包含默认的目录结构,如`app`、`config`、`db`等,分别用于存放应用程序代码、配置文件、数据库迁移脚本等。 ...

    Rails 101 入门电子书

    - 测试安装: 创建一个简单的Rails应用来验证是否成功安装。 #### 五、练习作业0-Hello World - **目标**: - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器...

    Ruby on Rails入门例子

    2. 创建资源:使用`rails generate controller Posts`生成控制器,再用`rails generate scaffold Post title:string content:text`生成模型和相关的控制器、视图及路由。 3. 迁移数据库:编写迁移文件,更新数据库表...

    Rails编写的微论坛Campo.zip

    一个用 Rails3 MongoDB 写的论坛,作者是 chloerei。 作者使用它开的论坛:http://codecampo.com/ 标签:Campo

    Rails相关电子书汇总

    标题 "Rails相关电子书汇总" 暗示了这个压缩包包含了关于Ruby on Rails框架的电子书籍资源。Ruby on Rails,通常简称为Rails,是一个基于Ruby语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,以...

    Rails项目源代码

    MVC模式将应用程序分为三个主要部分:模型(Model)处理数据逻辑,视图(View)负责显示用户界面,控制器(Controller)协调模型和视图的交互。在这个图片分享项目中,模型可能包括`User`(用户)、`Image`(图片)...

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成.zip

    webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...

    Advanced Rails

    **高级Rails** Rails,全称为Ruby on Rails,是一款基于Ruby编程语言的开源Web应用程序框架,以其MVC(模型-视图-控制器)架构模式而闻名。"Advanced Rails" 涵盖了Rails开发中的高级主题和技术,是Ruby on Rails...

    Rails 101S

    - **创建项目**:使用`rails new`命令创建一个新的Rails项目。 - **配置Git**:设置版本控制系统,确保代码变更能够被追踪记录。 - **使用Bootstrap进行前端设计**:介绍如何使用Bootstrap框架来快速搭建美观的...

    Ruby+on+Rails快速Web应用开发实战.pdf

    - **MVC架构**:文档中提到的MVC是Rails的核心架构模式,它将应用程序分为三个主要的组件:模型(Model)、视图(View)和控制器(Controller)。这种分离使得代码更加模块化,易于管理和扩展。 ### Rails应用的...

    应用Rails进行敏捷Web开发中文第三版

    《应用Rails进行敏捷Web开发》中文第三版是针对Ruby on Rails框架的一本详尽指南,主要聚焦于Rails 2.2.2版本。Ruby on Rails(简称Rails)是一款基于Ruby编程语言的开源Web应用程序框架,它遵循“Don't Repeat ...

    Ruby on Rails入门经典代码

    Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...

    Rails3常用命令行命令

    Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...

Global site tag (gtag.js) - Google Analytics