【问题标题】:Dynamic Select in RubyOnRails error in append select追加选择中的 RubyOnRails 中的动态选择错误
【发布时间】:2016-05-17 23:51:26
【问题描述】:

我正在尝试进行动态选择,当用户选择学校时只显示属于该学校的组,但是当我尝试更改选择时出现此错误:

缺少带有 {:locale=>[:en], :formats=>[:js, :html], :variants=>[], :handlers=>[:erb, :builder 的部分 admin/groups/_group , :raw, :ruby, :coffee]}。

CoffeeScript

$(document).on "page:change", ->
  $(document).on 'change', '#schools_select', (evt) ->
    $.ajax 'update_groups',
      type: 'GET'
      dataType: 'script'
      data: {
        school_id: $("#schools_select option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{errorThrown}")
      success: (data, textStatus, jqXHR) ->
        console.log("Dynamic school select OK!")

HTML

学校属于表单的模型,但组不是表单的属性。

    <div class="form-group">
      <%= f.label :school %><br>
      <%= f.select :school_id, options_for_select(@schools.active.collect { |school|
      [school.name.titleize, school.id] }, 1), {}, { id: 'schools_select' } %>
    </div>
    <div class="form-group">
      <%= label_tag :group %><br>
      <%= select_tag :group_id, options_for_select(@groups.active.collect { |group|
      [group.name.titleize, group.id] }, 1), { id: 'groups_select' } %>
    </div>

Javascript

$("#groups_select").empty().append("<%= escape_javascript(render(:partial => @groups)) %>")

红宝石

 def update_groups
   @groups = Group.where(school_id: params[:school_id])
   respond_to do |format|
     format.js
   end
 end

路线

     get 'students/update_groups', as: 'update_groups'

【问题讨论】:

  • 尝试将format.js 更改为format.json,我想你没有那个_group.html.erb 页面。
  • 您使用了respond_to 块,但没有告诉它要渲染什么。默认情况下,它将尝试渲染模板文件,这可能是“缺少部分”错误的原因。也许你想在那个 respont_to 块中使用format.json { render json: @groups }
  • @7urkm3n 如果将format.js 更改为format.json 现在丢失的文件是其他Missing template admin/students/update_groups, application/update_groups with {:locale=&gt;[:en], :formats=&gt;[:json], :variants=&gt;[], :handlers=&gt;[:erb, :builder, :raw, :ruby, :coffee]}. Searched in:。我添加了 _update_groups.html.erb 和 update_groups.html.erb 仍然无法正常工作。
  • 正如@Raffael 建议的那样,我将respond_to respond_to do |format| format.json { render json: @groups } end 更改为解决了丢失的部分错误,但是现在第二个选择在第一个选择更改时没有刷新。
  • 检查浏览器的 Javascript 控制台可能会提示您为什么某些东西无法按预期工作。在您的 Ajax 回调处理程序中使用 console.log。请自行研究有关 Javascript 调试的更多信息。

标签: javascript ruby-on-rails coffeescript


【解决方案1】:

使您的方法如下所示。另外,请确保您的 ajax 请求触发。

def update_groups
   @groups = Group.where(school_id: params[:school_id])
   render json: @groups, root: false
 end

【讨论】:

  • 此渲染有效,但现在组选择没有刷新所选学校的数据。
  • 现在你需要处理来自 ajax 的 response 成功数据,逻辑你在哪里做 .append 的事情。
  • 另外,$("#groups_select").empty().append("&lt;%= escape_javascript(render(:partial =&gt; @groups)) %&gt;") 你不需要这个,我不知道你把它放在哪里。它与format.js 很好用。如果你有 create.js.erb 等文件...现在你持有 $AJAX,只需使用那个将你自己的逻辑放入成功部分。
【解决方案2】:

我的错误是我没有告诉我要渲染什么,然后我试图更新其他文件中的选择,但没有必要。

这是更新后的代码

咖啡脚本

$(document).on "page:change", ->
  $(document).on 'change', '#schools_select', (evt) ->
    $.ajax 'update_groups',
      type: 'GET'
      dataType: 'script'
      data: {
        school_id: $("#schools_select option:selected").val()
      }
      error: (jqXHR, textStatus, errorThrown) ->
        console.log("AJAX Error: #{errorThrown}")
      success: (data, textStatus, jqXHR) ->
        groups = JSON.parse(data)
        $.each groups, (index) ->
          $('#groups_select').empty().append $('<option></option>').attr('value', groups[index].id).text(groups[index].name)
        return

红宝石

  def update_groups
    @groups = Group.where(school_id: params[:school_id])
    respond_to do |format|
      format.json { render json: @groups }
    end
  end

我删除了 javascript 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 2012-01-11
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多