`

Rails2中的诡异(1)

阅读更多
应用场景:
图书分类和图书,一对多关系。
我想实现当分类中还有所属图书,就不能让用户删除分类。

我是这样做的:

Model中
class CategroyHasBooksException < RuntimeError;end
class BookCategory < ActiveRecord::Base
has_many :books, :dependent => :nullify
before_destroy :if_still_has_books

def if_still_has_books
  raise CategroyHasBooksException unless self.books.blank?
end


控制器中
  # 删除图书分类
  def destroy
    @book_category = BookCategory.find(params[:id])
    @book_category.destroy
  rescue CategroyHasBooksException
    flash[:warn] = "图书分类[#{@group_category.name}]中还有图书,你不能删除此分类"
  else
    flash[:notice] = "图书分类[#{@group_category.name}]已删除"      
  ensure
    redirect_to :action => 'index'
  end


上面的代码和逻辑从表面上,是没有问题的,还是现实是:图书分类中有图书存在,分类还是可以删除,在if_still_has_books方法中self.books.blank?始终为true。

我左找右找上找下找,原来是has_many :books, :dependent => :nullify中的:dependent => :nullify引来了诡异,去掉:dependent => :nullify,世界又变得美好了。
分享到:
评论
2 楼 grubbyskywu 2009-03-17  
   邮箱   grubbyskywu@163.com
1 楼 grubbyskywu 2009-03-17  
    偶像   可以发你那篇  我用EXT2.0的布局做的后台管理界面  那个的源码给我吗

相关推荐

    rails2-sample

    从给定的文件信息来看,我们正在探讨的是一本关于Ruby on Rails的书籍,书名为《Simply Rails2》,作者是Patrick Lenz。本书旨在为初学者提供深入理解Ruby on Rails框架的指南,从基础概念到高级主题均有涵盖,是...

    Ruby on Rails中文指南

    2. **模型(Models)**:模型代表了数据库中的数据和业务逻辑。Ruby on Rails使用ActiveRecord,一个ORM(对象关系映射)库,使得与数据库交互变得简单。你可以通过定义类和方法来创建、更新、查询数据。 3. **视图...

    Rails的中文乱码问题

    2. **文件编码**:Rails项目中的文件(如控制器、模型、视图)如果用非UTF-8编码保存,可能导致读取时乱码。使用UTF-8无BOM格式保存所有文本文件。 3. **HTTP头设置**:Web服务器或Rails应用程序需要设置正确的字符...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...

    [Rails 常用插件简介]CRUD Generator 2

    **Rails 常用插件简介 - CRUD Generator 2** 在Ruby on Rails框架中,开发过程中经常需要创建、读取、更新和删除(CRUD)数据。为了提高开发效率,开发者通常会使用各种插件来自动化这个过程。CRUD Generator 2就是...

    Rails 中mongrel的安装

    2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    Flexible Rails: Flex3 on Rails2

    2. **路由匹配**:Web服务器将请求传递给Rails中的路由代码,根据`config/routes.rb`中定义的路由规则触发相应的控制器方法。 3. **控制器逻辑**:控制器方法被调用后,会与各种ActiveRecord模型进行交互,这些模型...

    agile web development with rails2代码

    4. ** erb模板**:ERB(Embedded Ruby)是Rails2中用于视图层的模板引擎,允许在HTML中嵌入Ruby代码,动态生成页面。 5. **Helper方法**:Rails提供了许多内置的Helper方法,帮助开发者在视图层处理常见的HTML渲染...

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    Rails.Angular.Postgres.and.Bootstrap.2nd.Edition

    Chapter 1. Set Up the Environment Chapter 2. Create a Great-Looking Login with Bootstrap and Devise Chapter 3. Secure the User Database with Postgres Constraints Chapter 4. Perform Fast Queries with ...

    Rails项目源代码

    1. **Rails框架基础**: Rails的核心理念是DRY(Don't Repeat Yourself),它鼓励开发者编写简洁、可复用的代码。框架提供了丰富的内置功能,如路由、ORM(对象关系映射)、数据库迁移和强大的脚手架工具,帮助快速...

    中文版rails教程

    在Ruby on Rails中,开发者可以快速构建功能丰富的动态网站,因为它提供了大量的内置功能和库,如数据库连接、ORM(对象关系映射)系统ActiveRecord、模板引擎ActionView以及路由系统ActionController等。...

    rails版本区别

    在Rails 2中,开发者通过一系列以`script/`开头的脚本来执行各种任务,如生成代码、启动服务器或数据库控制台等。然而,在Rails 3中,这些命令的调用方式被简化并统一化。例如,`script/generate`被替换为`rails g`...

    关于rails 3.1 cucumber-rails 1.2.0

    总的来说,了解和熟练掌握Rails 3.1和Cucumber-Rails 1.2.0的用法,对于任何希望在Ruby on Rails环境中进行高效、高质量开发的团队来说都是至关重要的。通过阅读相关的博客文章(如给出的链接),开发者可以深入学习...

    rails中使用javascript日期控件

    1. **日期格式匹配**:确保WebCalendar.js的日期格式与Rails应用中约定的日期格式一致。Rails默认使用ISO 8601标准(YYYY-MM-DD),而WebCalendar.js可能有不同的默认设置,需要进行相应的配置。 2. **数据验证**:...

    Ruby On Rails中文教材(PDF)

    2. **Rails框架结构**:学习者需要了解MVC架构,包括模型(Model)、视图(View)和控制器(Controller)各自的作用。模型处理数据逻辑,视图负责展示用户界面,而控制器作为两者之间的桥梁,协调数据传输。 3. **...

Global site tag (gtag.js) - Google Analytics