rails中一个窗体多个模型——fields_for
详细参考
http://railscasts.com/episodes/73-complex-forms-part-1中part-1、2、3部分
借助field_for可以生成表单来处理两个或更多模型对象的数据
先看一个官方的例子,一个表单中有person和permission两个模型,其中每个person包含一个permission
<%= form_for(@person) 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 %>
当一个person包含多个permission时,view代码如下
<%= form_for(@person) do |person_form| %>
First name: <%= person_form.text_field :first_name %>
Last name: <%= person_form.text_field :last_name %> <% for permission in @person.permissions %>
<%= fields_for "permission[]", permission do |permission_fields| %>
Admin : <%= permission_fields.check_box :admin %>
<% end %>
<% end %>
<% end %>
1、其中"permission[]"保证了多个permission对象id不同,都包含在param[]中
2、此时,param[:person]={:first_name => v, :last_name => v, :permission1=>v, :permission2 => v...}
3、<%=person_form.fields_for "permission[]", permission do |permission_fields| %>时,
param[:person]={:first_name => v, :last_name => v, :persom=>{:permission1=>v, :permission2 => v...}}
model代码
# models/.person.rb
def permission_attributes=(permission_attributes)
permission_attributes.each do |attributes|
permissions.build(attributes)
end
end
为了对应view里面的permission[]
controller里的create方法
# persons_controller.rb
def new
@person= person.new
3.times { @person.permissions.build }
end def create
@person= Person.new(params[:project)
if @person.save
flash[:notice] = "Successfully created project."
redirect_to persons_path
else
render :action => 'new'
end
end
rails中一个窗体多个模型——fields_for的更多相关文章
- WinForm中一个窗体调用另一个窗体
[转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...
- ubuntu 工作区中拖动一个窗体到另一个工作区就卡住回不到桌面了
ubuntu 工作区中拖动一个窗体到另一个工作区就卡住回不到桌面了 解决方法: 按 alt + 回车 键直接就返回去了
- 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了
系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...
- c# winform 在一个窗体中使用另一个窗体中TextBox控件的值——解决办法
[前提]一个winform应用程序项目中,窗体B,需要使用 窗体A 中一个TextBox控件的值,进行计算等操作. [解决方案] 1.在窗体A中定义:public static double a;// ...
- ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档]
ChatGirl 一个基于 TensorFlow Seq2Seq 模型的聊天机器人[中文文档] 简介 简单地说就是该有的都有了,但是总体跑起来效果还不好. 还在开发中,它工作的效果还不好.但是你可以直 ...
- Winforn中怎样在窗体中打开另一个窗体
场景 在Winform的窗体A中打开另一个窗体B. 实现 //打开新的窗体 CurveCompare cc = new CurveCompare(); cc.Show(); 效果 以上代码的实现参照: ...
- 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体
在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体 在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体ShowAllPage sAllPage = new ShowAllPage(); ...
- ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)
在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...
- rails 中 create, new, build, save 的用法以及误区汇总
自己很初级,初级的不能再初级,所以初次接触rails的时候,对于里面的create,new,build等方法不是很了解,用的很混乱,导致经常出现不必要的bug,很苦恼,决定,总结一下,结合网上已有资源 ...
随机推荐
- Token Fund到底是什么?
相比传统的VC基金,作为新生事物的Token Fund从一出场便吸引着行业目光的追随.行业早期ICO促使区块链行业野蛮生长,大量区块链项目涌现,同时也带动了大量“代投”朝Token Fund方向发展. ...
- 利用tomcatserver配置https双向认证
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36897387 首先请保证已经安装好jdk,而且 ...
- Property Animator基本用法
ObjectAnimator anim=ObjectAnimator.ofFloat(textview, "alpha", 0f, 1f); //ObjectAnimator an ...
- python基础21 ------python基础之socket编程
一.C/S架构和B/S架构的简介 略 二.osi七层模型 略 三.socket层 1.如图所示: socket层是存在于应用层和传输层直接抽象出来的一层. 2.socket层是什么? Socket是应 ...
- PHP网页导出Word文档的方法分离
今天要探讨的是PHP网页导出Word文档的方法,使用其他语言的朋友也可以参考,因为原理是差不多的. 原理 一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上 ...
- yii 资料
https://github.com/forecho/awesome-yii2 会随时更新 链接:http://pan.baidu.com/s/1mgCKtUK 密码:t6t1 与<YII框架& ...
- 【Flask】模板继承
# 模版继承笔记: ### 为什么需要模版继承:模版继承可以把一些公用的代码单独抽取出来放到一个父模板中.以后子模板直接继承就可以使用了.这样可以重复性的代码,并且以后修改起来也比较方便. ### 模 ...
- 初步了解Spark生态系统及Spark Streaming
一. 场景 ◆ Spark[4]: Scope: a MapReduce-like cluster computing framework designed for low-laten ...
- Codeforces 900D Unusual Sequences:记忆化搜索
题目链接:http://codeforces.com/problemset/problem/900/D 题意: 给定x,y,问你有多少个数列a满足gcd(a[i]) = x 且 ∑(a[i]) = y ...
- jquery---each循环的退出
jquery循环函数each退出使用 return false(等效break); return true(continue) 此时return 退出的是each函数,并不影响其父级函数的ret ...