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 或者我会丢失 error_messages_for @avatar 并因此不会收到错误消息,但是做渲染是个问题,因为我有一些路线。

在我的 routes.rb 我有以下内容:

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

所以我想知道的是如何再次显示位于 :controller => 'board', :action => 'show' 的板并显示@avatar 的错误消息?

对不起,如果这看起来微不足道。对我来说,这是一场斗争。先感谢您。

米切尔

4

1 回答 1

0

您可以通过呈现模板而不是重定向或呈现动作来做到这一点。例如,如果您想在失败时渲染 board/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 操作,因此您的 Flash 消息和实例变量(@avatar、@board)将被保留。

于 2011-02-18T17:17:30.143 回答