0

私の todo list app では、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

そして、次のエラーがスローされます:

{:locale=>[:en]、:formats=>[:html]、:handlers=>[:erb、:builder、:coffee]} の部分的なリスト/home_signed_in、application/home_signed_in がありません。検索場所:
  * "/home/lnreddy/my_rails_projects/todo_app/app/views"

pages/ フォルダを検索しないのはなぜですか? よくわかりません。

4

1 に答える 1

1

コントローラーでを使用renderしても、そのアクションはレンダリングされず、そのビューがレンダリングされます。

ListsController のコンテキスト内でレンダリングpages/homeしているため、そのビューが部分的な 'home_signed_in' を検索する場合、リスト コントローラー (およびリスト フォルダー) である現在のコントローラーのフォルダー内を検索します。

ビューが同じフォルダーからパーシャルをレンダリングすることを確認したい場合は、フォルダー名をプレフィックスとして付けます。「home/home_signed_in」。または、パーシャルを複数のコントローラーで共有する場合は、それをアプリケーション フォルダーに移動します (エラー メッセージのリストにあるように、すべてのビューはこのフォルダーからの読み取りにフォールバックします)。

パーシャルの詳細については、http: //guides.rubyonrails.org/layouts_and_rendering.html#using-partialsを参照してください。

于 2013-06-09T08:33:10.797 に答える