首页 文章

尝试呈现js.erb文件时出现“模板丢失”错误

提问于
浏览
1

我是Rails的新手,我遇到了无法呈现.js.erb文件的问题 . 我认为问题的根源在于Rails的内部路由机制要求我命名和配置我的文件,但我缺少一两件,我不知道如何寻找需要修复的内容 .

我有一个HTML视图,其中包含指向控制器操作的链接:

<%# snip %>
<div id="holding_issues_list">
  <%= link_to "Show issues on hold", {
      :action => "show_user_issues",
      :controller => "support",
      :issue_type => "holding",
      :user_id => @user.id },
    :remote => true %>
</div>
<%# snip %>

我想(但我不确定) :remote => true 导致链接进行AJAX调用 .

这是控制器 app/controllers/support_controller.rb 中相应的控制器操作:

def show_user_issues
  @target_div = params[:target_div] || "holding_issues_list"
  user = User.find(params[:user_id])
  issue_type = params[:issue_type]

  #snip - set the value of @issues
end

我希望在控制器退出时呈现名为 show_user_issues.js.erb 且放在 app/views/support 中的文件:

$("#<%= @target_div %>").show();
alert('test');
$("#<%= @target_div %>").html(
  "<%= escape_javascript render :partial => '_show_user_issues', :locals => {:target_div => @target_div, :issues => @issues} %>");

这是 app/views/support/_show_user_issues.html.erb ,我希望 show_user_issues.js.erb 呈现的部分:

<% for issue in @active_issues %>
  <div id="issue_<%= issue.id %>_display">
      <%= render :partial => 'show_issue_mini', :locals => {:issue => issue} %>
  </div>
<% end %>

当我尝试单击原始HTML视图中的链接时,没有任何反应 . 当我在新标签中打开它时,我收到以下错误消息:

缺少模板缺少模板支持/ show_user_issues,带有{:locale => [:en]的application / show_user_issues,:handlers => [:builder,:erb],:formats => [:html]} . 搜索:“/ home / <> / app / views”“/ home / <> / gems / kaminari-0.14.1 / app / views”

我放入 show_user_issues.js.erbalert('test') 没有出现,所以我认为Rails在渲染该文件时会挂起 - 也就是说,路由机制无法找到它 . 我该如何纠正这个问题?

附:我仔细检查了我输入的所有文件名与代码库中的完全相同 .

2 回答

  • 3

    更改控制器操作以处理请求类型 .

    def show_user_issues
      @target_div = params[:target_div] || "holding_issues_list"
      user = User.find(params[:user_id])
      issue_type = params[:issue_type]
    
      #snip - set the value of @issues
    
      respond_to do |format|
        format.js
      end
    end
    

    这将检查请求的格式,如果是 :remote => true ,则为 .js . 所以它将通过渲染 show_user_issues.js.erb 文件来处理它 .

  • 2

    在应用Manoj Monga的答案之后遇到的其他几个问题,我怀疑其他新的Rails开发人员可能遇到:


    show_user_issues.js.erb ,我有

    [...].html("<%= escape_javascript render :partial => '_show_user_issues',[...]
    

    '_show_user_issues' 之前的下划线导致ERB构建器失败 . 它本来应该是 'show_user_issues' .


    _show_user_issues.html.erb ,我有

    <% for issue in @active_issues %>
    

    但是,如果仔细查看 show_user_issues.js.erb ,我将变量命名为 @issues ,而不是 @active_issues

    [...]:locals => {:target_div => @target_div, :issues => @issues}[...]
    

    所以我将HTML部分中的行更改为

    <% for issue in @issues %>
    

    在最后几次更改后,我添加的新功能按预期工作 .

相关问题