该表单首先使用js根据选择类别填充产品选择列表。这行得通。然后它应该根据在产品选择框中选择的产品来切换不同的 div。
咖啡脚本文件的第一部分工作正常。如果我使用 Webrick 提供页面,而不是通过 Apache2/Passenger,则第二部分有效。我在日志文件中没有错误,在 IE 调试器中也没有错误(是的,正确的)- div 只是不显示。
有谁知道为什么文件的一部分一直有效而另一部分只在某些时候有效?
我认为这可能是资产管道问题,但是这两个功能都不起作用,对吧?我在开发模式下运行它。提前感谢您的帮助。
_form.html.erb
<%= form_for(@request) do |f| %>
<% if @request.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@request.errors.count, "error") %> prohibited this request from being saved:</h2>
<ul>
<% @request.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<% if current_user %>
<% if current_user.analyst %>
<div class="field">
<font color="maroon">Check here for an IT Project-Related Request that has already been budgeted and does not require further departmental approvals :</font> <%= f.check_box :project %>
</div>
<% end %>
<% end %>
<p></p>
<!-- SHOW ONLY CATEGORIES WITH ACTIVE PRODUCTS -->
<div class="field" id="category">
<%= f.label :category_id, "Select a Category:" %>
<%= f.collection_select(:category_id, Category.sorted, :id, :name, :include_blank => true ) %>
</div>
<!-- BASED ON CATEGORY SELECTED ABOVE, LOAD CORRESPONDING ACTIVE PRODUCTS BELOW -->
<div class="field" id="product">
<%= f.label :product_id, "Select a Product/Service:" %>
<%= f.grouped_collection_select :product_id, Category.active.sorted, :active_products, :name, :id, :name, include_blank: true %>
</div>
<!-- BASED ON PRODUCT SELECTED ABOVE, SHOW CORRESPONDING PRODUCT.DESCRIPTION AND CORRESPONDING DIV BELOW IF APPLICABLE -->
<div class="field" id="product_description">
<!-- <%#= @request.product.description %> ..... show the product.description of the product selected above -->
</div>
<div class="field" id="quantity">
<%= f.label :quantity, "Quantity:" %>
<%= f.text_field :quantity %>
</div>
<p></p>
<div id="dynamic_portion">
<!--<-- These are the custom DIVS that need to load based on the product_id selected above:-->
</div>
<!-- ALWAYS SHOW TEXT AREA FOR FURTHER INFO -->
<div class="field" id="requestor_note">
<%= f.label :requestor_note, "Please give full details below..." %>
<%= f.text_area :requestor_note, :size => "50x6" %>
</div>
</br><p></p>
<div>
<%= f.submit "Submit", :name => nil, :class => "btn" %>
</div>
<% end %>
requests_controller.rb:
def refresh_dynamic_content
@product = Product.find(params[:product_id])
if @product.id == 8
render :partial => 'requests/new_city_employee' ,:layout => false
elsif @product.id == 10
render :partial => 'requests/exit_employee' ,:layout => false
elsif @product.id == 12 or @product.id == 21
render :partial => 'requests/change_employee' ,:layout => false
end
end
requests.js.coffee
jQuery ->
#//this handles product population based on category select - this works with Webrick and Phusion/Apache2
$('#request_product_id').parent().hide()
products = $('#request_product_id').html()
emptyOption = $('<option />').attr('value', '');
$('#request_category_id').change ->
category = $('#request_category_id :selected').text()
options = $(products).filter("optgroup[label='#{category}']").prepend(emptyOption).html()
if options
$('#request_product_id').html(options)
$('#request_product_id').parent().show()
else
$('#request_product_id').empty()
$('#request_product_id').parent().hide()
#// this should handle <div> toggle based on product select - this works with Webrick, but not Phusion Passenger/Apache2:
$("#request_product_id").change ->
trial = $("#request_product_id option:selected").val()
container = $("#dynamic_portion")
$.ajax
url: "/refresh_content?product_id=" + trial
type: "get"
dataType: "html"
processData: false
success: (data) ->
container.html data
更新 - 萤火虫:
当使用 Apache/Passenger 运行时,我得到了这个:
Request URL:
http://server/refresh_content?product_id=10
Request Method:
GET
Status Code:
HTTP/1.1 404 Not Found
在 Webrick 中运行时,我得到以下信息:
Request URL:
http://localhost:3000/refresh_content?product_id=10
Request Method:
GET
Status Code:
HTTP/1.1 200 OK
运行 apache 时,它从服务器根目录服务,而不是应用程序根目录 - ??