在我的待办事项列表应用程序中,我在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”出现在pages目录中。因此,当我尝试创建的列表不会被保存时,此代码将在ListsController中执行:
else
render 'pages/home'
end
以下错误被抛出:
Missing partial lists/home_signed_in, application/home_signed_in with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/home/lnreddy/my_rails_projects/todo_app/app/views"
为什么不在页面/文件夹中搜索?我很困惑。
答案 0 :(得分:1)
在控制器中使用render
不会呈现该操作,而是呈现视图。
您正在ListsController的上下文中呈现pages/home
,因此当该视图查找部分'home_signed_in'时,它会查找当前控制器的文件夹,即列表控制器(以及列表文件夹) )。
如果要确保视图从同一文件夹呈现部分,请在文件夹名称前加上,例如。 '家/ home_signed_in'。或者,如果要在多个控制器之间共享partial,请将其移动到应用程序文件夹(所有视图都会回退到从此文件夹中读取,如错误消息列表所示)。
有关部分内容的更多信息,请参阅http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials。