`
hideto
  • 浏览: 2690650 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Rails宝典之第十七式: 多对多Checkbox编辑

    博客分类:
  • Ruby
阅读更多
这次是讲多对多情况下的编辑,我们使用Checkbox来完成该工作:
class Category < ActiveRecord::Base
  has_and_belongs_to_many :products
end

class Product < ActiveRecord::Base
  has_and_belongs_to_many :categories
end

上面Category和Product是多对多的关系,下面我们来写Product编辑页面:
<%= error_messages_for 'product' %>

<p>
  Name<br/>
  <%= text_field :product, :name %>
</p>

<p>
  Price<br/>
  <%= text_field :product, :price %>
</p>

<p>
  <% for category in Category.find(:all) %>
  <div>
    <%= check_box_tag "product[category_ids][]", category.id, @product.categories.include?(category) %>
    <%= category.name %>
  </div>
  <% end %>
</p>

可以看到,我们用check_box_tag来编辑Product的categories
而category_ids属性是Product的has_and_belongs_to_many自动生成的
下面再看ProductsController的update方法代码:
def update
  params[:product][:category_ids] ||= []
  @product = Product.find(params[:id])
  if @product.update_attributes(params[:product])
    flash[:notice] = 'Product was successfully updated.'
    redirect_to :action => 'show', :id => @product
  else
    render :action => 'edit'
  end
end

留意一下,update方法需要先使用params[:product][:category_ids] ||= []来将category_ids清空
不然当我们取消所有的category Checkbox时,后台sql不会传递空的category_ids数组,而是不传递category_ids参数
这样会导致取消不了category Checkbox。
分享到:
评论
3 楼 qianjigui 2009-04-10  
很好用,非常感谢!
2 楼 viva_yang 2009-02-11  
不涉及中间表?
1 楼 water84222 2008-06-25  
向你请教个问题,
页面中若干个checkbox个数,由一个资源文件中数目确定,这些checkbox存储在一个字段中,对这些checkbox的增删改查应以怎样的思路,处理,

相关推荐

    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:以中国的省市地区三级联动选择为例

    在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种...通过学习这个实例,开发者可以掌握如何在Rails应用中集成第三方库,处理层级数据,以及创建交互式的前端界面。这对于提升Web应用的用户体验非常有价值。

    Rails 101S

    ### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...

    Ruby on Rails入门例子

    Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    ### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助...随着对Rails的深入了解,你将会发现更多高级特性和应用场景,为实际项目开发提供更多可能性。

    Rails 101 入门电子书

    - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器和视图。 - 在浏览器中查看结果。 #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用...

    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 应用程序中...

    [Rails] Crafting Rails Applications (英文版)

    [Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...

    Ruby-on-Rails-3.rar_site:www.pudn.com

    该资源的核心内容是《Web开发敏捷之道 - 应用Rails进行敏捷Web开发 - 第三版》这本书的PDF版本。这本书详细介绍了使用Ruby on Rails框架进行敏捷Web开发的相关知识。 Ruby on Rails(简称Rails)是一种基于Ruby编程...

    Rails相关电子书汇总

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

    Advanced Rails

    "Advanced Rails" 涵盖了Rails开发中的高级主题和技术,是Ruby on Rails学习进阶的重要资源,尤其适合已经对基础Rails有一定了解的开发者。 在Web开发领域,Rails以其高效、简洁的代码和“约定优于配置”的哲学吸引...

    Ruby on Rails入门经典代码

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

    rails_multisite:Rails应用的多租户

    Rails多站点这个gem为Rails应用程序提供了多数据库支持。 使用其中间件,您可以对应用程序进行分区,以便每个主机名都有自己的数据库。 它提供了一系列用于处理多个数据库的帮助程序,以及一些用于处理这些数据库的...

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板.zip

    rails_email_preview, 在 Rails 中,预览和编辑应用程序邮件程序模板 Rails 电子邮件预览 使用这里 Rails 引擎在浏览器中预览电子邮件。 兼容 Rails 4.2 。电子邮件审阅: 所有电子邮件预览的列表: 代表有两个主题...

    sprockets-rails:Sprockets Rails集成

    提供用于Rails 4.x(及更高版本)资产管道的Sprockets实现。 安装 gem 'sprockets-rails' , :require =&gt; 'sprockets/railtie' 或者,如果禁用了Bundler自动请求功能,则在config/application.rb require 'sprockets...

    rails敏捷开发,我的成功之路

    ### 知识点四:第一个Rails应用 **标题与描述**:本书通过一个简单的“Hello, Rails”示例来引导读者快速上手,掌握创建新应用的基本流程。 **详细说明**: - **创建新应用**:使用`rails new`命令初始化一个新的...

    mongoid_rails_migrations:Mongoid的数据迁移

    gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...

Global site tag (gtag.js) - Google Analytics