0

我有一个创建项目的基本表格......

<%= form_for(@project, :url => {:action=>'create'}) do |f| %>
<%= f.text_field(:name, {class: "form-control"}) %>
<%= f.text_area(:instructions, {class: "form-control"}) %>
<%= f.submit('Create Project') %>
<% end %>

在控制器中,我有两个动作:

  def create
    @project = Project.new( project_params )
    if @project.save
        flash[:notice]= "New project created!"
        redirect_to(:action=>'index')
    else
      flash[:error]="Problem creating project"
      redirect_to(:action=>'new')
    end
  end

  def new
    @project = Project.new()
  end

我有几个验证可以防止字段为空。当表单失败时,我再次被重定向回“新”页面,但@project变量始终为空。

为什么?

4

2 回答 2

3

您不想重定向错误,而是要呈现:这样做意味着new页面将使用来自create操作(和 URL)的变量呈现,并按照您的预期预先填充表单字段。

将您的控制器操作更改为:

def create
    @project = Project.new( project_params )
    if @project.save
        flash[:notice]= "New project created!"
        redirect_to(:action=>'index')
    else
      flash[:error]="Problem creating project"
      render :new
    end
  end
于 2013-09-13T19:45:26.317 回答
2

更改redirect_to(:action=>'new')render 'new'

于 2013-09-13T19:45:38.330 回答