我正在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重定向会启动新请求。
答案 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
方法。