0

验证后,我显示错误并返回:same页面。表单上的某些字段已填写,因此我希望在显示错误消息时保持填写。这是我的控制器代码:

def signup
   @user=User.new(params[:user])
   if @user.save
     render "thanks", layout: "thanks"
   else
     flash[:notice] = "Unable to create an user, user name already exists. Try again!"
     render "signup", layout: "signup"
  end
end

我的视图代码如下:

<%= form_for "user_signup" do |f|%>
  <%= f.text_field :username %>
<% end %>

这该怎么做?

4

2 回答 2

0

您必须将值存储在控制器中的某个地方(例如在散列中),并且在呈现视图时填写该散列的值(如果存在)。如果您想为某些字段设置默认值,您将执行类似的操作。

于 2013-08-29T07:22:42.247 回答
0

你的设计是错误的。至少应该有两个动作,一个是显示表单,另一个是创建对象。

像这样

def signup
  @user = User.new
end

def create
  @user=User.new(params[:user])
  if @user.save
    render "thanks", layout: "thanks"
  else
    flash[:notice] = "Unable to create an user, user name already exists."
    render "signup", layout: "signup"
  end
end

create失败时,注册模板将被渲染,模板中的@user实例将被替换为填充错误的失败实例,并且您将看到所有填充。

于 2013-08-29T07:46:41.427 回答