我使用devise gem构建社交网络应用程序,并在目录app / views / users中显示一些视图,以显示当前用户的列表
_user.html.erb, index.html.erb, show.html.erb
用户的路线是
users GET /users(.:format) users#index
因为我正在使用自定义设计控制器,所以我需要将设计视图从设计目录移动到用户目录,并且为了保持组织有序,我将用户视图移动到新的子目录用户/视图。这导致他们停止工作,直到我添加
render 'users/view/index'
到users_controller.rb:
class UsersController < ApplicationController
before_filter :authenticate_user!
def index
@users = User.all
render 'users/view/index'
end
def show
@user = User.find(params[:id])
unless @user == current_user
redirect_to :back, :alert => "Access denied."
end
end
end
但仅在我从users / view
中的index.html.erb文件中删除此代码之后 <% @users.each do |user| %>
<tr>
<%= render user %>
</tr>
<% end %>
产生错误:
ActionView::MissingTemplate in Users#index
我只是希望有人能向我解释我不仅要解决这个问题需要做些什么,还要为什么。另外,如果有更好的方法让我这样做,请告诉我。
答案 0 :(得分:1)
Rails在这一行中做了一些魔术:
<%= render user %>
它标识实例的类并加载相应的部分以呈现视图。如果将视图文件放在不常见的位置,则此逻辑不再起作用,您必须自己编写更多代码。
用以下内容替换该行:
<%= render partial: 'users/view/user', locals: { user: user } %>