0

该表单首先使用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 时,它​​从服务器根目录服务,而不是应用程序根目录 - ??

4

1 回答 1

0

我将 ajax 网址更改为:

url: "/refresh_content?product_id=" + trial

到:

url: "/requests/refresh_content?product_id=" + trial

现在它可以工作了。谢谢你,萤火虫。

于 2013-08-28T16:31:32.393 回答