簡體   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