0

私はこれについて他の人の投稿を読んだことがありますが、私はまだ自分が抱えている問題に頭を悩ませることができません。だから聞いてみようと思いました。

アバターをアップロードするためのフォームがあります。このフォームは:controller =>'board'、:action=>'show'から表示されます

<% form_tag("avatar/upload", :multipart => true ) do %>
  <%= error_messages_for :avatar %>
  ...

これはうまくいきます。問題は、エラーメッセージを表示できないことです。

アップロードは:controller =>'avatar'、:action=>'upload'によって処理されます

if params_posted?(:avatar)
  image = get_image(params)
  @board = Board.find(session[:board_id])
  @avatar = Avatar.new(@board.id, image)
  if @avatar.save
    # ???
  end
end

今、これは私が問題を抱えている部分です。私はredirect_toを実行できないことを知っています。そうしないと、@ avatarのerror_messages_forが失われ、エラーメッセージが表示されなくなりますが、ルートがいくつかあるため、レンダリングを実行すると問題が発生します。

私のroutes.rbには、次のものがあります。

map.connect 'board/celebrating/:id/:name', :controller => 'board', :action => 'show'

だから私が知りたいのは、:controller =>'board'、:action =>'show'にあるボードを再び表示し、@avatarのエラーメッセージを表示する方法です。

これが些細なことだと思われる場合は申し訳ありません。私にとってそれは闘争でした。前もって感謝します。

ミッチェル

4

1 に答える 1

0

アクションをリダイレクトまたはレンダリングする代わりに、テンプレートをレンダリングすることでそれを行うことができます。たとえば、失敗時にboards / show.html.erbをレンダリングする場合は、次のようにします。

if params_posted?(:avatar)
  image = get_image(params)
  @board = Board.find(session[:board_id])
  @avatar = Avatar.new(@board.id, image)
  if @avatar.save
    ...
  else
    render :template => 'boards/show'
  end
end

BoardsController#showアクションは実行されないため、フラッシュメッセージとインスタンス変数(@ avatar、@ board)は保持されることに注意してください。

于 2011-02-18T17:17:30.143 に答える