rails or ruby 中 fields_for 提交方式_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > rails or ruby 中 fields_for 提交方式

rails or ruby 中 fields_for 提交方式

 2012/8/21 11:11:11  chen_miao  程序员俱乐部  我要评论(0)
  • 摘要:Project这个Model的new表单,我们需要在创建Project对象时也创建一些Task对象我们可以使用fields_for这个标签:<!--new.rhtml--><%form_for:project,:url=>projects_pathdo|f|%><p>Name:<%=f.text_field:name%></p><%fortaskin@project.tasks%><
  • 标签:for rails Ruby 方式

Project这个Model的new表单,我们需要在创建Project对象时也创建一些Task对象
我们可以使用fields_for这个标签:

  1. <!--?new.rhtml?-->??
  2. <%?form_for?:project,?:url?=>?projects_path?do?|f|?%>??
  3. ??<p>??
  4. ????Name:?<%=?f.text_field?:name?%>??
  5. ??</p>??
  6. ??<%?for?task?in?@project.tasks?%>??
  7. ????<%?fields_for?"project[task_attributes][]",?task?do?|task_form|?%>??
  8. ??????<p>??
  9. ????????Task:?<%=?task_form.text_field?:name?%>??
  10. ??????</p>??
  11. ????<%?end?%>??
  12. ??<%?end?%>??
  13. ??<p><%=?submit_tag?"Create?Project"?%></p>??
  14. <%?end?%>??

这里我们使用fields_for来为@project的每个task构建一个伪表单,实际上还是@project最外层同一个表单,不过这样我们就
可以在同一表单里添加额外的Model对象字段,再看一个官方的例子:

?
  1. <%?form_for?:person,?@person,?:url?=>?{?:action?=>?"update"?}?do?|person_form|?%>??
  2. ??First?name:?<%=?person_form.text_field?:first_name?%>??
  3. ??Last?name:?<%=?person_form.text_field?:last_name?%>??
  4. ??
  5. ??<%?fields_for?:permission,?@person.permission?do?|permission_fields|?%>??
  6. ????Admin??:?<%=?permission_fields.check_box?:admin?%>??
  7. ??<%?end?%>??
  8. <%?end?%>?

然后我们在Project这个Model里添加task_attributes=方法:

  1. #?models/.projects.rb??
  2. def?task_attributes=(task_attributes)??
  3. ??task_attributes.each?do?|attributes|??
  4. ????tasks.build(attributes)??
  5. ??end??
  6. end??

这样,我们的controller里的create方法没有受到任何“污染”:

  1. #?projects_controller.rb??
  2. def?new??
  3. ??@project?=?Project.new??
  4. ??3.times?{?@project.tasks.build?}??
  5. end??
  6. ??
  7. def?create??
  8. ??@project?=?Project.new(params[:project)??
  9. ??if?@project.save??
  10. ????flash[:notice]?=?"Successfully?created?project."??
  11. ????redirect_to?projects_path??
  12. ??else??
  13. ????render?:action?=>?'new'??
  14. ??end??
  15. end??

From: http://www.cnblogs.com/orez88/articles/1530286.html

发表评论
用户名: 匿名