将视图移动到新的子目录时,必须进行哪些更改以及为什么?

时间:2015-06-11 21:32:32

标签: ruby-on-rails ruby devise

我使用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

我只是希望有人能向我解释我不仅要解决这个问题需要做些什么,还要为什么。另外,如果有更好的方法让我这样做,请告诉我。

1 个答案:

答案 0 :(得分:1)

Rails在这一行中做了一些魔术:

<%= render user %>

它标识实例的类并加载相应的部分以呈现视图。如果将视图文件放在不常见的位置,则此逻辑不再起作用,您必须自己编写更多代码。

用以下内容替换该行:

<%= render partial: 'users/view/user',  locals: { user: user } %>