2013-06-10 3 views
1

Я новичок в Rails, и у меня возникла проблема, когда я не могу отобразить файл .js.erb. Я считаю, что корень проблемы заключается в том, что внутренний механизм маршрутизации Rails ожидает, что я буду называть и настраивать свои файлы именно так, но я пропускаю одну или две части, и я не уверен, как искать то, что нужно исправить ,Ошибка «Ошибка шаблона» при попытке визуализации файла js.erb

У меня есть вид 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, приложение/show_user_issues с {: локаль => [: EN] : handlers => [: builder,: erb],: formats => [: html]}. Искал в: * "/ главная/<>/приложение/просмотров" * "/ главная/<> /gems/kaminari-0.14.1/app/views"

alert('test'), что я вложил в show_user_issues.js.erb не отображается, так что я думаю, что Rails получает повесил на рендеринг этого файла - то есть механизм маршрутизации не может его найти. Как я могу исправить эту проблему?

P.S. Я дважды проверил, что я ввел все имена файлов точно так же, как они находятся в базе кода.

ответ

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

Пар других проблемы, которые я столкнулся после применения ответа Маноджа 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 %> 

После того, как эти последние изменения пары, новая функциональность, которую я добавлял, работала так, как ожидалось.

+0

Думаю, я пропустил эти моменты после того, как увидел, что вам не хватает части формата. :) –

+0

@ManojMonga Все в порядке. Часть format.js была самой большой вещью, которую мне не хватало - после этого я смог быстро понять остальное. Я просто хочу оставить это здесь, если у кого-то будут подобные проблемы в будущем. Спасибо за вашу помощь! =) – Kevin

+0

Основная цель этого форума - помочь всем, кто наткнулся на него, следовательно, вы получите +1 на этот ответ;) Кстати, пожалуйста! –

Смежные вопросы