Rails应用程序布局功能在任何视图中使用application_controller

时间:2016-03-02 16:10:48

标签: javascript ruby-on-rails ruby-on-rails-4 coffeescript

所以我希望在每个视图中都有动态选择框用于导航,现在它们在localhost:3000localhost:3000/diys/中正常工作,但例如在http://localhost:3000/diys/newhttp://localhost:3000/diys/25中他们没有。

部分包含views / layouts / application.html.erb中的选择框

<div class="side_select_box">
    <%= form_tag search_path, :method => :get do %>
        <%= select_tag "side_make_select", options_for_select(@side_makes.collect { |make|[make.make_name, make.id] }), include_blank: "Select make" %>
        <%= select_tag "side_model_select", (render "make_models/make_model") %>
    <% end %>
</div>

.. assets / javascripts / applications.coffee,我认为问题可能出在“$ .ajax ...”行

$ ->
    $(document).on 'change', "#side_make_select", (evt) ->
        $.ajax 'update_side_make_models',
           type: 'GET'
           dataType: 'script'
           data: {
             side_make_id: $("#side_make_select option:selected").val(),
             side_model_div_id: "#side_model_select"
           }
           error: (jqXHR, textStatus, errorThrown) ->
             console.log("AJAX Error: #{textStatus}")
           success: (data, textStatus, jqXHR) ->
             console.log("Dynamic side make select OK!")

../ views / application / update_side_make_models.coffee,问题也可能是这个文件应该在其他地方,但在哪里?

$("<%= @sidemodelsid %>").empty()
    .append("<%= escape_javascript(render "make_models/make_model") %>")

并从那里呈现“make_models / make_model”并使用

application_controller.rb

...
def side_select_boxes
    @side_makes = Make.all
    @models = MakeModel.where("make_id = ?", 0)
end

def update_side_make_models
    @models = MakeModel.where("make_id = ?", params[:side_make_id]).order(:make_model_name)
    @sidemodelsid = params[:side_model_div_id]
end
...

因此,当在主页或索引视图中选择make in make选择框时,它会使模型正常,在rails控制台中打印

Started GET "/update_side_make_models?side_make_id=15&side_model_div_id=%23side_model_select&_=1456934054006" for :: 1 at 2016-03-02 17:56:38 +0200                            
Processing by ApplicationController#update_side_make_models as JS                                                   
  Parameters: {"side_make_id"=>"15", "side_model_div_id"=> "#side_model_select", "_"=>"1456934054006"}               
...

但在展示视图和新视图中,当我选择make in make选择框时,模型选择框没有任何反应,并且这是在rails控制台中打印的

Started GET "/diys/update_side_make_models?side_make_id=15&side_model_div_id=%23side_model_select&_=1456934054008" for ::1 at 2016-03-02 18:01:09 +0200                       
Processing by DiysController#show as JS                   
  Parameters: {"side_make_id"=>"15", "side_model_div_id"=> "#side_model_select", "_"=>"1456934054008", "id"=>"update_side_make_models"}
...
ActiveRecord::RecordNotFound (Couldn't find Diy with 'id'= update_side_make_models):
  app/controllers/diys_controller.rb:128:in `set_diy'     

因此,出于某种原因,它将“/ diys /”放在“/ update_side_make_models”之前,并通过“DiysController#show”处理它,但应该通过“ApplicationController#update_side_make_models”进行处理

1 个答案:

答案 0 :(得分:0)

哦,只需要指向ajax就可以在

中找到一个目录了

<强> ..资产/ Javascript角/ applications.coffee

$ ->
$(document).on 'change', "#side_make_select", (evt) ->
    $.ajax '../update_side_make_models',
       type: 'GET'
       dataType: 'script'
       data: {
         side_make_id: $("#side_make_select option:selected").val(),
         side_model_div_id: "#side_model_select"
       }
       error: (jqXHR, textStatus, errorThrown) ->
         console.log("AJAX Error: #{textStatus}")
       success: (data, textStatus, jqXHR) ->
         console.log("Dynamic side make select OK!")