我有以下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>
答案 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,现在我们都很高兴了!
非常成功!