我正在尝试使用简单表单和我的Rails 4应用程序。
我有名为projects.rb和programs.rb的模型。这两个模型中的每一个都有一些共同的组件。我用另一个名为scope.rb的模型处理这些问题。每个项目和计划都有一个范围。
在范围内,我有名为data.rb和materials.rb的模型。
在我的项目视图中,我问了几个门槛问题。其中一个是你想要数据吗? (答案是真还是假)这个问题的答案存储在我的范围模型中。如果答案是肯定的,那么我想询问有关数据的更多问题(答案存储在我的数据模型中)。
所以,关系是每个节目&项目有一个范围。每种数据和材料都属于范围。
目前,所有这些数据模型问题都在我的项目视图中列出。
在项目视图中列出所有内容时,项目视图如下:
这是范围问题,以确定是否需要有关数据或材料的更多详细信息:
<div class="col-md-3 col-md-offset-1">
<%= f.label 'What sort resources are involved in this project?', :class => 'question-project' %>
</div>
<div class="col-md-7">
<div class="response-project" style="margin-left:5%">
<%= f.simple_fields_for :scope do |s_all| %>
<%= s_all.input :if_datum, :as => :boolean, :label => false, inline_label: 'Data' %>
<%= s_all.input :if_material, :as => :boolean, :label => false, inline_label: 'Equipment or materials' %>
<% end %>
</div>
</div>
</div>
如果数据的答案是真的,那么我问:
<div class="col-md-3 col-md-offset-1">
</div>
<div class="col-md-7">
<%= f.simple_fields_for :scope do |data_s| %>
<%= data_s.simple_fields_for :datum do |d| %>
<%= d.label 'Is this data confidential or commercially sensitive?', :class => 'response-project' %> <br>
<%= d.collection_radio_buttons :confidential, [[true, ' Yes '] ,[false, ' No']], :first, :last, {:item_wrapper_class => 'inline'}, {:class => "radio-inline response-project" } %>
<%= d.input :prim_sec, label: 'What sort of data do you want?', label_html: {class: 'response-project'}, collection: ["Primary", "Secondary", "Both" ], prompt: "Choose one", item_wrapper_class: 'inline' %>
<% end %>
<% end %>
</div>
</div>
</div>
这一切都很好,除了我想在我的程序模型中使用相同的表单。这就是为什么我试图将它们提取到我的数据模型中的部分视图中,以便我可以在项目和程序模型中使用它们。
当我从data / _form视图开始时,使用以下提取的内容:
<div class="row">
<div class="col-md-3 col-md-offset-1">
</div>
<div class="col-md-7">
<%= f.simple_fields_for :scope do |data_s| %>
<%= data_s.simple_fields_for :datum do |d| %>
<%= d.label 'Is this data confidential or commercially sensitive?', :class => 'response-project' %> <br>
<%= d.collection_radio_buttons :confidential, [[true, ' Yes '] ,[false, ' No']], :first, :last, {:item_wrapper_class => 'inline'}, {:class => "radio-inline response-project" } %>
<%= d.input :prim_sec, label: 'What sort of data do you want?', label_html: {class: 'response-project'}, collection: ["Primary", "Secondary", "Both" ], prompt: "Choose one", item_wrapper_class: 'inline' %>
<% end %>
<% end %>
</div>
</div>
</div>
并在项目视图中替换该代码以呈现&#34;数据/表单&#34;。
我的问题是,当我将数据代码移动到data / _form以询问数据特定问题时,我会得到下面列出的错误。我的观点是,当我尝试这样做时:
未定义的局部变量或方法`f&#39;对于#&lt;#:0x00000107ff3a90&gt;
这是对data / _form视图中的行的引用:
<%= f.simple_fields_for :scope do |data_s| %>
有谁知道我做错了什么?
谢谢
答案 0 :(得分:0)
我假设您正在做这样的事情:
<%= simple_form_for project do |f| %>
<%= render 'data/form' %>
<% end %>
渲染局部变量时,不传递局部变量。因此,如果您需要访问f
部分内的data/_form
,则需要为部分提供相应的局部变量。试试这个:
<%= simple_form_for project do |f| %>
<%= render 'data/form', f: f %>
<% end %>
或者,以更冗长的方式:
<%= simple_form_for project do |f| %>
<%= render partial: 'data/form', locals: {f: f} %>
<% end %>
HTH!