0

複数の作成手順を使用して、ユーザーがイベントを作成したいと考えています。現時点では、2 番目のステップを完了した後に最初のステップにリダイレクトされるという次の問題があります。

以下は私のコントローラーです

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

モデルを作成するための通常の 1 ステップの方法はnew、コントローラーを呼び出してページnewをレンダリングするnewページに移動することです。ユーザーはフォームに入力し、createコントローラーを駆動する送信を押します。それが機能する場合、ページにリダイレクトされshowます。

2 段階の作成を行う場合、おそらくnew最初にページに移動してアクションを呼び出しますcreateが、モデルを保存するのではなく、step2ページをレンダリングして詳細を入力し、非表示フィールドの詳細の最初のページ。そのフォームに最初のアクションとは異なるアクションを呼び出させ、その時点でモデルを保存します。逆に、最初のフォームでstep2アクションを呼び出し、次にそのページでアクションを呼び出すこともできますcreate。もう 1 つのオプションは、ステップ 1 の後にモデルを保存し、ステップ 2 でそれを取得することです。このオプションは、ステップ 1 が成功してもステップ 2 が失敗する場合、見苦しいものになります。

コントローラーnewはそのままモデルをデータベースに保存し (ユーザー入力を取得せずに)、new2ページをレンダリングします。私はこれがあなたが望むものであることを非常に疑っています. もしそうなら、私はそれに対して強くお勧めします。

Step1 がレンダリング対象でnew2、Step 2 がレンダリング対象であると想定しますnew3。ただし、これらの形式はどちらもupdateコントローラーを呼び出します (表示されていません)。また、方法newは標準的ではありません。窒息しなかったことに少し驚いています。標準的な方法は:get:post:put、および:deleteです。ルート構成で非標準のものを作成できる場合がありますが、お勧めしません。フォームをnew2コントローラーに送信する場合は、ルートを設定し、:urlオプションを使用しform_forてそこに到達する必要があります。

それが役立つことを願っています。

于 2013-01-26T02:21:04.230 に答える