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

Rails宝典七十三式:复杂表单Part1

    博客分类:
  • Ruby
阅读更多
来看一个典型的场景,Project这个Model的new表单,我们需要在创建Project对象时也创建一些Task对象

我们可以使用fields_for这个标签:
<!-- new.rhtml -->
<% form_for :project, :url => projects_path do |f| %>
  <p>
    Name: <%= f.text_field :name %>
  </p>
  <% for task in @project.tasks %>
    <% fields_for "project[task_attributes][]", task do |task_form| %>
      <p>
        Task: <%= task_form.text_field :name %>
      </p>
    <% end %>
  <% end %>
  <p><%= submit_tag "Create Project" %></p>
<% end %>

这里我们使用fields_for来为@project的每个task构建一个伪表单,实际上还是@project最外层同一个表单,不过这样我们就
可以在同一表单里添加额外的Model对象字段,再看一个官方的例子:
<% form_for :person, @person, :url => { :action => "update" } do |person_form| %>
  First name: <%= person_form.text_field :first_name %>
  Last name: <%= person_form.text_field :last_name %>

  <% fields_for :permission, @person.permission do |permission_fields| %>
    Admin? : <%= permission_fields.check_box :admin %>
  <% end %>
<% end %>


然后我们在Project这个Model里添加task_attributes=方法:
# models/.projects.rb
def task_attributes=(task_attributes)
  task_attributes.each do |attributes|
    tasks.build(attributes)
  end
end


这样,我们的controller里的create方法没有受到任何“污染”:
# projects_controller.rb
def new
  @project = Project.new
  3.times { @project.tasks.build }
end

def create
  @project = Project.new(params[:project)
  if @project.save
    flash[:notice] = "Successfully created project."
    redirect_to projects_path
  else
    render :action => 'new'
  end
end
分享到:
评论
2 楼 guhguh 2008-01-02  
<% for task in @project.tasks %>  
    <% fields_for "project[task_attributes][]", task do |task_form| %>  
      <p>  
        Task: <%= task_form.text_field :name %>  
      </p>  
    <% end %>  
  <% end %>  


这样的代码生成的hash 能直接在控制器里面@project = Project.new(params[:project)   这样吗,

我试了好多次,这样是不行的?
1 楼 aploa_zl 2007-12-07  
[b][i][u]
引用
[list][list=][img][/img][url][/url][/list][/list]
[list][img][/img][list=][/list][/list]
[/u][/i][/b] 

相关推荐

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

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

    Ruby on Rails入门例子

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

    Ruby on Rails:Rails中的表单处理.docx

    Ruby on Rails:Rails中的表单处理.docx

    Ruby-SimpleForm轻松处理Rails表单

    在Ruby on Rails框架中,构建表单是一项常见的任务,而Simple Form gem就是为了简化这一过程而设计的。Simple Form是一款强大的表单构建器,它提供了一种简洁、直观的方式来创建复杂的表单,使得开发者能更专注于...

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

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

    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...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **学习路径**:继续深入学习Rails的高级特性,如Active Record模式、表单构建器等。 - **社区资源**:加入Rails官方论坛、Stack Overflow等社区获取帮助和支持。 #### 十一、文档编写技巧 - **重要性**:良好的...

    Ruby on Rails入门经典代码

    1. **Rails基础知识**: - MVC架构:Rails的核心设计模式,模型负责数据处理,视图负责展示,控制器协调两者。 - Routes:Rails的路由系统将HTTP请求映射到控制器的相应动作,定义了应用的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 应用程序中...

    Advanced Rails

    1. **优化性能**:Rails应用在处理大量请求时可能会面临性能挑战。书中会介绍如何通过缓存(如Action Cache和Page Cache)、数据库查询优化、资产管道优化等手段提升应用性能。 2. **复杂的路由**:Rails的路由系统...

    Beginning Google Maps Applications with Rails and Ajax: From Novice to Professional (part1)

    Beginning Google Maps Applications with Rails and Ajax: From Novice to Professional

    sprockets-rails:Sprockets Rails集成

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

    Rails相关电子书汇总

    1. **ActiveRecord**:这是Rails的ORM(对象关系映射)组件,它允许开发者通过Ruby对象与数据库进行交互,无需编写SQL代码。 2. **ActionController**:负责处理HTTP请求,并将数据转发给相应的模型和视图。它管理...

    Ruby on Rails 指南 v5.0.1 中文版

    - **创建复杂表单**:介绍如何构建包含多个嵌套字段的复杂表单。 #### ActionController概览 - **控制器的作用**:解释控制器在MVC架构中的角色。 - **控制器命名约定**:说明控制器命名的规则和约定。 - **方法和...

    搭建Rails测试环境2: Autotest和Spork的安装和配置

    **步骤1:安装所需gem** 在你的`Gemfile`中添加以下依赖: ```ruby group :development, :test do gem 'autotest' gem 'autotest-rails' gem 'spork-rails' gem 'guard-spork' end ``` 然后运行`bundle ...

    ruby on rails part1

    ruby2.0安装文件part1 集成了rails framework,sqllite等

    Rails 101 入门电子书

    #### 十三、练习作业6-重构代码 - **目标**: - 提高代码质量和可维护性。 - **方法**: - 使用系统helper简化模板。 - 自定义helper函数封装复杂逻辑。 通过以上内容的学习,初学者可以全面掌握Ruby on Rails的...

Global site tag (gtag.js) - Google Analytics