Controller正在寻找HTML格式而不是JS格式(虽然我们设置:remote => true)

时间:2013-06-06 20:15:43

标签: jquery ruby-on-rails ruby-on-rails-3 jquery-ui

我有以下link_to:

<%= link_to 'user_' + user.id.to_s, {:controller => 'admin', :action => 'view_user', :id => user.id}, :remote => true %>

但是,当我点击该链接时,我收到以下错误:

ActionView::MissingTemplate at /admin/view_user
Missing template admin/view_user, application/view_user with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml, :rabl]}.
Searched in: /Users/me/Documents/production/my_app/app/views

它应该是在寻找view_user.js.erb。该文件肯定存在。

这个问题似乎在我改变了我处理jquery&amp;的方式之后出现了。 jQuery的UI。我现在正在使用jquery-ui-rails gem。我从application.js文件中删除了需要jquery-ui和jquery_ujs的行。我不知道无论如何要添加jquery_ujs(也许它是用rails打包的?)

有什么线索可能会发生什么?令人费解的是,我明确地说:remote =&gt; true将导致呈现JS文件。

这是view_user的样子:

def view_user
  respond_to do |format|
    format.js
  end
  @user = User.find(params[:id])
  user_show_helper
end

user_show_helper是一个庞大的方法,它基本上设置了显示用户配置文件片段所需的一堆实例变量(即user_show_helper中没有调用渲染方法)。

以下是view_user.js.erb的样子:

$("#user_under_review").html("<%= escape_javascript render(:partial => 'admin/view_user' ) %>");

这就是部分_view_user.html.erb的样子:

<%= render 'users/user_brief' %>
<div class="table_td_middle" id="<%= 'user_number_' + @user.id.to_s %>">
  <%= link_to 'Approve user?', approve_user_as_admin_path(@user.id), :remote => true, :confirm => 'Are you sure you want to approve this user?' %>
</div>

2 个答案:

答案 0 :(得分:1)

您的控制器看起来不像是配置为渲染Javascript。 ActionView::MissingTemplate错误的第二行表示该操作仅配置为呈现HTML::formats=>[:html]

您是否指定了可以从控制器操作呈现的格式?

# app/controllers/admin_controller.rb
def view_user
    # Business logic
    respond_to do |format|
        format.html
        format.js
    end
end

编辑:

The latter answer to this post表明rake assets:precompile可以有条件地解决与呈现HTML而不是Javascript的:remote => true链接相关的问题。

答案 1 :(得分:0)

我从我的Gemfile中删除了jquery-rails gem,因此必须手动将jquery_ujs.js文件添加到我的assets文件夹中。

我重新添加了jquery-rails gem,现在我们都很高兴了!

非常成功!