0

我有以下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 和 jquery-ui 的方式后,似乎出现了这个问题。我现在正在使用 jquery-ui-rails gem。我从 application.js 文件中删除了需要 jquery-ui 和 jquery_ujs 的行。反正我不知道要添加 jquery_ujs (也许它是用rails打包的?)

任何线索可能会发生什么?令人费解的是,我认为明确地说 :remote => 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>
4

2 回答 2

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

编辑:

对这篇文章的后一个回答表明,rake assets:precompile可以有条件地解决与:remote => true呈现 HTML 而不是 Javascript 的链接相关的问题。

于 2013-06-06T20:28:24.943 回答
0

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

我重新添加了 jquery-rails gem,现在我们一切顺利!

巨大的成功!!

于 2013-06-06T21:35:09.667 回答