0

我想由用户使用多个创建步骤来创建一个事件。目前我有以下问题,它在完成第二步后重定向到第一步。

以下是我的控制器

def new 
  @event = Event.new(params[:event])
  @user = current_user
  respond_to do |format|
    if @event.save
      format.html { render :template => "events/new2" }
      format.json { render json: event_new2, status: :created, location: @event }
    else
      format.html { render action: "new" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

def event_new2
  @event = Event.find(params[:id])
  respond_to do |format|
    if @event.update_attributes(params[:event])
      format.html { render :template => "events/new3" }
      # format.json { render json: event_new2, status: :created, location: @event }
    else
      format.html { render action: "event_new2" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

 # POST /events
 # POST /events.json
def create
  @event = Event.new(params[:event])
  @user = current_user
  respond_to do |format|
    if @event.save
      format.html { redirect_to @event, notice: 'event erfolgreich erstellt.' }
      format.json { render json: @event, status: :created, location: @event }
    else
      format.html { render action: "new" }
      format.json { render json: @event.errors, status: :unprocessable_entity }
    end
  end
end

我的模型只需要存在标题和描述。意见如下:

步骤1

<%= simple_form_for (@event), :method => 'new' do |f| %>  
  <%= f.error_notification %>
  <%= f.input :title,:label => 'Event Titel' ,:placeholder=>"Titel des Events"%>
  <%= f.text_area :description,:label => 'Beschreibung',:placeholder=>"Beschreibung"%>
  <%= f.submit "Event erstellen", class: "btn btn-large btn-primary pull-right"%>

第2步

<%= simple_form_for (@event), :method => 'new' do |f| %>  
  <%= f.error_notification %>
  <%= f.input :category%>
  <%= f.input :website, :label=>"Website"%>

有什么帮助吗?提前致谢。

4

1 回答 1

0

创建模型的常规一步法是让某人转到new将调用new控制器并呈现页面的new页面。用户填写表单并点击驱动create控制器的提交。如果可行,它会重定向到该show页面。

如果我要进行两步创建,我可能仍然会先转到new页面并让它调用create操作,但是我不会保存模型,而是渲染step2页面并让他们填写更多详细信息并包括隐藏字段中的详细信息的第一页。我会让该表单调用与第一个不同的操作,此时我将保存模型。相反,我可以让第一个表单调用该step2操作,然后让该页面调用该create操作。另一种选择是在步骤 1 之后保存模型并在步骤 2 中检索它。如果 step1 成功,但 step2 失败,这个选项会有点难看。

您的new控制器会将模型保存到数据库中(无需任何用户输入),然后呈现new2页面。我高度怀疑这是你想要的。如果是,我强烈建议不要这样做。

我假设 Step1 是您为之渲染的,new2而 Step 2 是您为之渲染的new3。然而,这两种形式都将调用update控制器(未显示)。该方法new也不标准,我有点惊讶它没有窒息。标准方法是:get:post:put:delete。您也许可以在您的路线配置中创建非标准的,但我不推荐它。如果您想将表单定向到您的new2控制器,那么您需要设置一条路线并使用该:url选项将form_for其到达那里。

我希望这会有所帮助。

于 2013-01-26T02:21:04.230 回答