我有一个'新'表单,可以在帖子模型中验证。当验证器启动时,它会呈现错误。
新的帖子页面路径位于'/ posts / new'
在验证时,新的帖子页面路径位于'/ posts'..我需要它回到'/ posts / new'。
这是我的控制者:
def create
@post = current_user.posts.build(params[:post])
if @post.save
redirect_to public_post_page_path(@post.public_url)
else
render :action => :new
end
end
我觉得这可能与我的表格有关。所以这是formtastic的第一行:
<%= semantic_form_for [:student, post], :html => {:id => "post_form"} do |form| %>
答案 0 :(得分:13)
这是rails的正确行为。
在创建操作中,它只是呈现“新”视图文件。因此,url将是/ posts,但视图将正确显示表单。这种行为没有错;一般来说,轨道惯例是很好的形式。如果你只渲染新的内置轨道错误也可以工作;但是如果你重定向,他们将无法显示。
如果你真的想要回到那个网址,你需要使用:
redirect_to
而不是渲染。
答案 1 :(得分:0)
如果验证失败,用户应该看到包含错误的表单并保持/posts/new
。这就是你想要的,对吧?
有一种简单的方法可以实现这一目标。
在表单上设置remote: true
以阻止网址前进。处理ajax:success
以使用新渲染的表单替换页面上的表单。
$('form[data-remote=true]').on 'ajax:success', (e, data, status, xhr) ->
if isHTML(data)
thisForm = "form[id=#{@getAttribute('id')}]"
$(thisForm).replaceWith $(data).find(thisForm)
isHtml()
函数来自this question。