如何跨控制器传递验证错误?

时间:2011-05-02 06:07:42

标签: ruby-on-rails-3

我正在Rails中制作传统论坛来练习。我有一个Topic模型和一个嵌套的Post模型。主题可以有很多帖子。

Topics#Show有一个@topic.posts列表,然后是一个新的帖子表单。

# Topics#Show
def show
  @topic = Topic.find(params[:id])
  @post = @topic.posts.new
end

提交新帖子会将其发送至Posts#Create

# Posts#Create
  def create
    @topic = Topic.find(params[:topic_id])
    @post = @topic.posts.new(params[:post])
    @post.user = current_user
    if @post.save
      redirect_to @topic, :notice => "Successfully created post."
    else
      render :action => 'new' # <-- Unsure what to do here
    end
  end

如果Post无法保存,我希望它呈现Topics#Show并在那里显示验证错误。

根据我的理解,params不会持续redirect_to因为302重定向会启动新请求。

2 个答案:

答案 0 :(得分:1)

您应该渲染主题/显示视图。而不是

render :action => 'new' # <-- Unsure what to do here

执行:

render :template => 'topics/show'

答案 1 :(得分:1)

使用render :template => "topics/show"并确保将@topic变量设置为与TopicsController#show操作中的操作方式相同。您将无法从show调用此PostsController方法。