首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于不带循环的嵌套属性,Rails 4呈现部分属性

对于不带循环的嵌套属性,Rails 4呈现部分属性
EN

Stack Overflow用户
提问于 2015-11-12 23:58:41
回答 1查看 198关注 0票数 0

假设我有一个如下所示的表单

代码语言:javascript
复制
<%= form_for @uni, :html => {:multipart => true, :honeypot => true} do |uni_form| %>    
 <% 3.times { @uni.app.build } %>
                  <%= uni_form.fields_for :apps do |builder| %>                    
                      <%= render 'app', uni_form: builder %>
                  <% end %>
<% end %>

我的应用程序部分是

代码语言:javascript
复制
  <div>
    <%= uni_form.label :uni_id, "University" %>
    <%= uni_form.collection_select :uni_id, @unis, :id, :name, {:include_blank => true} %>
  </div>

现在我想要没有循环的第一个表单代码。像这样的东西

代码语言:javascript
复制
 <%= form_for @uni, :html => {:multipart => true, :honeypot => true} do |uni_form| %>    
     <% 3.times { @uni.app.build } %>

<%= render 'app', uni_form: builder %>
<%= render 'app', uni_form: builder %>
<%= render 'app', uni_form: builder %>

    <% end %>

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2015-11-13 19:14:33

首先,不要在视图中构建关联的对象-在控制器中构建

代码语言:javascript
复制
#app/controllers/unis_controller.rb
class UnisConstroller < ApplicationController
   def new
      @uni = Uni.new
      3.times do
         @uni.apps.build
      end
   end
end

其次,在这里,fields_for方法是您的朋友。

通过使用以下命令,您将获得所需的内容:

代码语言:javascript
复制
#app/views/unis/new.html.erb
<%= form_for @uni, :html => {:multipart => true, :honeypot => true} do |uni_form| %>    
   <%= uni_form.fields_for :apps do |builder| %>                    
       <%= builder.label :uni_id, "University" %>
       <%= builder.collection_select :uni_id, @unis, :id, :name, {:include_blank => true} %>
   <% end %>
<% end %>

fields_for将获取模型的关联对象,并自动创建所需的字段。实际上没有必要“循环”-- fields_for为你做了……如果设置正确的话。

您遇到的问题是在运行时构建关联的对象,这不仅效率低下&违反约定,而且我认为这会阻止form_for识别它们(这就是允许fields_for循环访问它们的原因)。

上面的代码应该会帮你解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33675774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档