0

これはフォローアップの質問です: 1 つのアクションで異なるビューをレンダリングする

私が得ているエラーは次のとおりです。

Template is missing

Missing template items/show, application/show with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

ファイルをとshow.html.erbの 2 つのファイルにコピーし、重複を避けるために削除したことに注意してください。show_with_edit.html.erbshow_with_star.erbshow.html.erb

私のコードposts_controller.rb

def show
  if signed_in?
    show_signed_in
  else
    show_not_signed_in
  end
end  

def show_signed_in
  #add methods here
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html # show_with_edit.html.erb
    format.json { render json: @post }
  end
  render 'show_with_edit'
end

def show_not_signed_in
  #add methods here
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html # show_with_star.html.erb
    format.json { render json: @post }
  end
  render 'show_with_star'
end

今のところ、2 つの異なるビューが同一であることは承知しています。ここでは、別のテキストを入れただけです。これを確認したら、各ビューに独自のメソッドやコンテンツなどを追加します。

4

2 に答える 2

3

render を間違った場所に配置しました。

def show_signed_in
  #add methods here
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html # show_with_edit.html.erb
    format.json { render json: @post }
  end
  render 'show_with_edit'
end

する必要があります

def show_signed_in
  #add methods here
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html { render 'show_with_edit' }
    format.json { render json: @post }
  end
end

renderformat.html ブロッ​​クに移動されていることに注意してください。

同じことが show_not_signed_in にも当てはまります。

于 2013-04-10T12:22:54.417 に答える