0

在我的待办事项列表应用程序中,我的 ListsController 中有以下代码:

 def create
  @list= current_user.lists.build(params[:list])
  if @list.save
    flash[:notice]= "New List created"
    redirect_to controller: "pages",action: :home
  else
   render 'pages/home'
  end
end

页面/home.html.erb

 <% if signed_in? %>
    <%= render 'home_signed_in' %>
 <% else %>
   <%= render 'home_not_signed_in' %>
<% end %>

“home_signed_in.html.erb”和“home_not_signed_in.html.erb”存在于页面目录中。因此,当我尝试创建的列表未保存时,此代码将在 ListsController 中执行:

 else
   render 'pages/home'
  end

并引发以下错误:

缺少部分列表/home_signed_in、application/home_signed_in 和 {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}。搜索:
  *“/home/lnreddy/my_rails_projects/todo_app/app/views”

为什么不在 pages/ 文件夹中搜索?我很困惑。

4

1 回答 1

1

在您的控制器中使用render不会呈现该操作,它会呈现该视图

您正在pages/homeListsController 的上下文中进行渲染,因此当该视图查找部分“home_signed_in”时,它会在当前控制器的文件夹中查找,即列表控制器(和列表文件夹)。

如果您想确保视图呈现来自同一文件夹的部分,请在其前面加上文件夹名称,例如。'home/home_signed_in'。或者,如果要在多个控制器之间共享部分内容,请将其移动到应用程序文件夹(所有视图都回退到从该文件夹中读取,如错误消息列表所示)。

有关部分的更多信息,请参见http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials 。

于 2013-06-09T08:33:10.797 回答