`
cinic2003
  • 浏览: 37109 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails中的check_box的List的一个应用

阅读更多

 

面试时遇到的一个问题,在产品列表前加个上check_box,选择一个或几个产品,提交后到checkout页面,输入客户信息,如email和address等信息后,提交保存。

 

开始的思路:

把各个product的id传入check_box,提交后从params中获取选中的id值,再从数据库中,根据id值在checkout页面中列出相应的product的信息。

首先:在check_box中光传入id值是不够的,还要给这个check_box设个名字

接着:提交是用一个link_to,link_to也可以接受参数,但怎么把多个id作为参数给这个link_to

因此在处理的action中一直无法得到选中的产品的id值。

 

后改为:

check_box的name="product[]",value="<%= product.id %>"

然后放在一个form_tag中,而不是通过link_to,这样一提交,选中的id就能在params中。

但在action中如果这样查找:

Product.find(:all, :conditions => ["id = ?", params[:product]] )

 就会得到这样一个错误:

Operand should contain 1 column(s): SELECT * FROM `products`     WHERE (id = '1','3') 

看来已经得到了所选中的产品的ID,但怎么取出来呢?用了个直接办法,既然已经得到了ID,就一个个迭代出来并加到一个数组里:

@products = []
    params[:product].each do |p|
      @products << Product.find_by_id(p)
    end

 这样,在下一个页面就可以根据@products迭代出所选中的product了。

这里的checkbox没有用rails提供的标签,可能rails的标签更方便,下次可以试试。

 

 

用sacffold创建了product:

ruby script/generate scaffold product name:string price:decimal desc:string owner:string

如果要用form_tag:

<% form_tag checkout_products_path, :method => :put do %>

还要在routes.rb配置路径:

map.resources :products, :collection => {:checkout => :put}

在index.html.erb页面中将所有产品列出:

 

<h1>Listing products</h1>
<%= link_to '添加新产品', new_product_path %><br>
<%= flash[:notice] %>
<% form_tag checkout_products_path, :method => :put do %>
<table>
  <tr>
    <th colspan="2">Name</th>
    <th>Price</th>
    <th>Desc</th>
    <th>Owner</th>
  </tr>
<% for product in @products %>
  <tr>
    <td>
      <input name="id" value="<%= product.id %>" type="checkbox" />
      <%= check_box_tag "product[]", product.id,false %>
    </td>
    <td><%=h product.name %></td>
    <td><%=h product.price %></td>
    <td><%=h product.desc %></td>
    <td><%=h product.owner %></td>
    <td><%= link_to 'Show', product %></td>
    <td><%= link_to 'Edit', :controller => :products, :action => :edit, :id => product %></td>
    <td><%= link_to 'Destroy', product, :confirm => 'Are you sure?', :method => :delete %></td>
  </tr>
<% end %>
</table>
<%= submit_tag "生成订单" %>
<% end %>

 

其实还可以用form_for:

<% form_for :product, :url => {:action => :checkout} do |f| %>

 这样就可以不用配置routes,只要有:

map.resources :products

 

 

分享到:
评论
1 楼 chen_miao 2012-01-13  
作为初学者的我,正用到这个,谢谢了

相关推荐

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板.zip

    rails_apps_composer, 一个 gem,为 Rails 启动应用程序创建 Rails 应用程序模板 Rails 应用编辑器 Rails 应用程序编辑器 gem 安装一个 命令行 工具来从"食谱"的Collection 组装 Rails 应用程序。"你可以使用 rails_...

    inspinia admin - v2.5 Rails_Full_Version

    "inspinia admin - v2.5 Rails_Full_Version" 是一个基于Rails框架构建的后台管理系统的完整版本。这个系统采用流行的Inspinia Admin模板,提供了丰富的功能和自定义选项,旨在帮助开发者快速构建高效、现代且用户...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    InspiniaAdmin 2.6.1 Rails_Full_Version

    在Rails_Full_Version压缩包中,包含了完整的源代码和必要的资源文件,开发者可以通过解压并导入到Rails项目中,按照官方文档进行配置和定制。同时,这个版本可能还包含了升级记录、更改日志和可能的bug修复,以保证...

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    《敏捷Web开发与Rails》第三版是一本深入探讨Ruby on Rails框架在敏捷软件开发方法论下的应用指南。本书由多位知名作者共同编写,包括Sam Ruby、Dave Thomas、David Heinemeier Hansson等,他们都是在Ruby社区内享有...

    inspinia admin - v2.5 Rails_Seed_Project

    《Inspinia Admin - v2.5 Rails Seed Project:打造高效后台管理的全面解析》 ...总之,Rails_Seed_Project是Rails开发者构建后台应用的一个高效起点,能帮助你在短时间内打造出专业级别的后台管理界面。

    InspiniaAdmin 2.5 Rails_Seed_Project

    在这个Rails_Seed_Project中,开发者可以找到一个典型的Rails应用结构,包括Gemfile、config.ru、database.yml等核心配置文件,以及models、controllers、views和assets等目录,它们分别对应着业务逻辑、数据操作、...

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

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

    rails_best_practices:Rails项目的代码度量工具

    rails_best_practices ...默认情况下,rails_best_practices将解析vendor , spec , test和features目录中的代码。 排除目录 要排除目录,只需使用-e或--exclude调用: rails_best_practices -e "db/migrate

    RestFul_Rails_Dev_pdf_v_0.1.zip

    本资料“RestFul_Rails_Dev_pdf_v_0.1.zip”包含了《RESTful Rails Development》的翻译版,将深入探讨如何在Rails中实现RESTful的设计模式。 首先,RESTful设计的核心概念是资源(Resources)。在Rails中,资源...

    inspinia_admin_v2.5_Rails_Full_Version

    Rails是Ruby编程语言的一个开源Web应用程序框架,遵循MVC(模型-视图-控制器)架构模式,以简洁和生产力为核心理念,强调“约定优于配置”,使得开发过程更为高效。Inspinia Admin Rails全版本正是在这样的背景下...

    Rails_3_Cheat_Sheets.pdf

    Rails_3_Cheat_Sheets.pdf

    Rails101_by_rails4.0

    Rails(Ruby on Rails)是一个采用Ruby语言编写的开源Web应用框架,它遵循模型-视图-控制器(MVC)的架构模式,设计用来快速开发数据库驱动的动态网页。随着Rails版本的更新迭代,此书聚焦于一个特定的版本,帮助...

    InspiniaAdmin 2.5 Rails_full_version

    InspiniaAdmin 2.5 Rails_full_version

    从图像 生成 Bootstrap配色方案的 Rails 应用程序_css_ruby_html_代码_下载

    标题中的“从图像生成Bootstrap配色方案的Rails应用程序”是一个基于Ruby on Rails的Web应用,它的主要功能是根据用户上传的图像自动生成匹配的Bootstrap配色方案。Bootstrap是一款流行的前端开发框架,它提供了丰富...

    Rails_Recipes_with_Source_Code

    这本书通过一系列具体的“配方”(Recipes),旨在帮助开发者解决在构建Rails应用过程中遇到的各种问题,提升开发效率。 1. **路由(Routes)**:Rails的路由系统将HTTP请求映射到控制器的动作上,理解路由规则的...

Global site tag (gtag.js) - Google Analytics