2016-08-21 2 views
0

私はクラスShiftと新しいシフトを作成するフォームを持っています。一度に多くのシフトを作成できるように、私は日付と開始時間を選択するだけで、シフトをいくつ作成すればよいのかを知ることができます。シフトは30分です。複数のレコードをRailsにループで作成する

これで、ユーザーが選択するparam:ブロックによって決定されるループ内でcreateメソッドを呼び出すカスタムコントローラメソッドが用意されました。私は今、エラーメッセージが表示されなくなりましたが、フォームを送信すると何が起こるのか分かりません。私の質問は、どのように私は自分のcreate_blockメソッドを変更して、自分が望むようにすることができますか?

Shifts_controller:

def create 
    @shift = Shift.new(shift_params) 
    if @shift.save 
     #redirect_to shifts_url 
    else 
     render 'new' 
    end 
    end 

    def create_block 
    start = params[:start_time] 
    stop = params[:start_time] + 30.minutes 
    block = params[:block] 
    for number in 1..block do 
     Shift.create(date:params[:date], start_time:start, stop_time:stop) 
     start = stop 
     stop = stop + 30.minutes 
    end 
    redirect_to shifts_url 
    end 

_form.html.erb

<%= form_for @shift, :url => create_block_path(@shift) do |f| %> 
<%= render 'shared/error_messages', object: f.object %> 


<div class="field"> 
    <%= f.label :Datum %> 
    <%= f.date_select :date %> 
    </div> 
    <br> 
    <div class="field"> 
    <%= f.label :Börjar %> 
    <%= f.time_select :start_time, {minute_step: 30} %> 
    </div> 
    <br> 
    <div> 
    <%= f.label :Antal %> 
    <%= f.select :block, options_for_select(1..10) %> 
    </div> 
    <br> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

routes.rbを

resources :shifts do 
    member do 
    patch 'book/' => 'shifts#book', as: 'book' 
    patch 'un_book/' => 'shifts#un_book', as: 'un_book' 
    end 
end 
get 'shifts/:id/book' => 'shifts#book' 
get 'shifts/:id/un_book' => 'shifts#un_book' 
match '/shifts/new' => 'shifts#new', as: 'create_block', via: [:post] 

答えて

1

あなたのルートはShiftsController#newcreate_blockアクションをルーティングしています。それをShiftsController#create_blockにルーティングする必要があります。

試してみてください。

resources :shifts do 
    member do 
    patch 'book/' => 'shifts#book', as: 'book' 
    patch 'un_book/' => 'shifts#un_book', as: 'un_book' 
    end 
    collection do 
    post 'create_block' => 'shifts#create_block', as: 'create_block' 
    end 
end 
get 'shifts/:id/book' => 'shifts#book' 
get 'shifts/:id/un_book' => 'shifts#un_book' 
+0

私は彼が 'ポストを呼び出すようにしようとしているOPの例では、その中に追加したい:それは「Railsのオフ」new'とです。 「新」には従来の意味があります。後で作成するために単一のオブジェクトを準備することです。あなたの答えは素晴らしいものだと思います。私はまた、私は最後に2つがシフトリソースのメンバーでない理由を知らない、追加します。 – jaydel

+1

@jaydel、私はあなたが言うすべてに同意します。最後の2つのルートはパッチとして ':shiftts'ルートブロックのメンバーです。 'create_block'の重要な変更の1つを明確にするために、私は答えたままにしておきました。 –

関連する問題