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]
私は彼が 'ポストを呼び出すようにしようとしているOPの例では、その中に追加したい:それは「Railsのオフ」new'とです。 「新」には従来の意味があります。後で作成するために単一のオブジェクトを準備することです。あなたの答えは素晴らしいものだと思います。私はまた、私は最後に2つがシフトリソースのメンバーでない理由を知らない、追加します。 – jaydel
@jaydel、私はあなたが言うすべてに同意します。最後の2つのルートはパッチとして ':shiftts'ルートブロックのメンバーです。 'create_block'の重要な変更の1つを明確にするために、私は答えたままにしておきました。 –