2011-07-01 42 views
3

我想通过我的表单中的数据库中的数据进行循环。我想要处理的数据放在标签和文本框中。我怎么能在轨道上做到这一点?我是否会使用一个.each块在表单中循环?我在我的数据库中拥有它的原因是因为我的客户希望能够自己添加表单字段数据。Rails通过表单域中的数据循环访问


例如这里是我想要做的:

<%= form_for :order do |f| %> 
    @fields.each do |field| 
    <%= f.label field.name %> 
    <%= f.text_field field.name %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 

什么来完成这样的事情的最好方法?

请不要用railscast :)回答事先

感谢

+1

Railscast是你可以学习“如何捕鱼”一个有用的资源。如果你只是就这个问题提问,而有人“让你钓鱼”,那么你并没有真正学到什么,只是暂时解决了一个问题。作为回报,这种方法将比使用railscasts或书籍学习轨道消耗更多的时间。 – user482594

+0

@Jake - 如果它解决了你的问题,“接受”答案通常被认为是一种很好的形式,你可以通过点击答案左边的“打勾”来实现。:) –

+0

+1对RailsCast无反应。他们是一个很好的资源,但他们应该只用于增加额外的资源到答案的结尾,而不是答案本身。 – Sia

回答

2

是的,这会工作,但你错过了两行结束脚本标签:

<%= form_for :order do |f| %> 
    <% @fields.each do |field| %> 
     <%= f.label field.name %> 
     <%= f.text_field field.name %> 
    <% end %> 
    <%= f.submit %> 
<% end %> 

如果您需要比标签/文本字段对更复杂的东西 - 然后您可以使用部分模板并使用关键字集合:

<!-- in 'order.html.erb' --> 
<%= form_for :order do |f| %> 
    <!-- note: each 'field' is auto-populated from the collection/partial-name, but you need to pass the form in as a local --> 
    <%= render :partial => 'field', :collection => @fields, :locals => {:f => f} %> 
    <%= f.submit %> 
<% end %> 

<!-- in '_field.html.erb' --> 
<%= f.label field.name %> 
<%= f.text_field field.name %> 
<!-- and whatever else you want to do... --> 

更多的部分呈现在这里:http://api.rubyonrails.org/classes/ActionView/Partials.html

+0

而不是使用本地人可以使用一个对象吗? – Jake

+0

不确定你的意思? –