繁体   English   中英

Rails根据下拉选择显示部分内容

[英]Rails display partial based on drop down selection

因此,我引用此文件来设置我要执行的操作: 基于选择框的动态部分-Rails 2.3.5

基于product_type,我想动态显示两个不同的部分之一,每个部分都包含剩余的表单字段。

application.js

$('#capsule_project_type_id').change(function() {
      $.ajax({url: '/capsules/form_partial/' + this.value});
}

routes.rb

get '/form_partial/:id' => 'capsules#form_partial'

controller.rb

def form_partial
  @project_type_id = ProjectType.find(params[:id])
end

form_partial.js.erb

<% if @project_type_id == 1 || @project_type_id == 2 %>
  $('#form-details').html("<%= escape_javascript(render partial: 'form1', locals: { capsule: @capsule, f: f }) %>");
<% else %>
  $('#form-details').html("<%= escape_javascript(render partial: 'form2', locals: { capsule: @capsule, f: f }) %>");
<% end %>

new.html.erb创建表单:

<%= form_for @capsule, multipart: true do |f| %>
...
<div class="form-group">
<%= f.label :project_type_id, "Project type" %>
<%= f.select :project_type_id, ProjectType.all.collect{|p| [p.name, p.id]}, { :include_blank => "Please select a type..." }, { class: "form-control" } %>
</div>
<div id="form-details">
</div>

当我选择下拉列表时,ajax会触发,但我在控制台中不断收到此错误:

ActionView::Template::Error (undefined local variable or method `f' for #<#<Class:0x007fd298ce71e8>:0x007fd2980a0268>):
    1: <% if @project_type_id == 1 || @project_type_id == 2 %>
    2:   $('#form-details').html("<%= escape_javascript(render partial: 'weddingfields', locals: { capsule: @capsule, f: f }) %>");
    3: <% else %>
    4:   $('#form-details').html("<%= escape_javascript(render partial: 'showerfields', locals: { capsule: @capsule, f: f } ) %>");
    5: <% end %>

我在form_partial中设置了变量,但是无法识别。 我没有正确转义吗?

请指教。

考虑到您已经在f中定义了f ,这是一个奇怪的错误

<%= form_for @capsule, multipart: true do |f| %>

在引用f变量之前,您确定没有多余的end了吗?

顺便说一下,我不确定AJAX是最好的方法。

相反,您可以将所有表单部分放在页面上,并最初使用CSS / JS隐藏它们。

然后,您可以将Javascript事件处理程序附加到表单,以便在选择输入时将其对应的表单部分切换为打开状态。

顺便说一句,我发现如果手动编写而不是使用form_for通常更容易理解表单中发生的事情。 您可以看到本教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM