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 %>

コントローラーには、次の 2 つのアクションがあります。

  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ページがアクション (およびアクションの URL) からの変数でレンダリングされ、create期待どおりにフォーム フィールドに事前入力されることを意味します。

コントローラーのアクションを次のように変更します。

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 に答える