2017-10-02 5 views
0

私はHotelRoomという2つのモデルを持っています。私は新しいホテルと部屋を追加するためのフォームを作成したいと思います。これはホテルの名前と部屋の数を示しています。 "入れ子になったフォーム"を使うべきですが、それを正しく実装するのは難しいです。ここでフォームフィールドで別のモデルの数量を作成するフォーム

私のコードです:

HotelsController

class HotelsController < ApplicationController 

    def index 
    @hotels = Hotel.all 
    end 

    def new 
    @hotel = Hotel.new 
    end 

    def create 
    @hotel = Hotel.new(hotel_params) 

    if @hotel.save 
     redirect_to @hotel 
    else 
     render 'new' 
    end   
    end 

    def show 
    @hotel = Hotel.find(params[:id]) 
    end 

    def destroy 
    @hotel = Hotel.find(params[:id]) 
    @hotel.destroy 
    redirect_to hotels_url, notice: 'Hotel was successfully destroyed.' 
    end 

    private 

    def hotel_params 
    params.require(:hotel).permit(:name, :rooms_count) 
    end 
end 

ホテルモデル

class Hotel < ApplicationRecord 
    has_many :rooms, dependent: :destroy 
    accepts_nested_attributes_for :rooms 
end 

ルームモデル

class Room < ApplicationRecord 
    belongs_to :hotel, optional: true # avoiding rails 5.2 belongs_to error 
end 

フォーム

<%= form_with scope: :hotel, url: hotels_path, local: true do |form| %> 
    <p> 
    <%= form.label :name %><br> 
    <%= form.text_field :name %> 
    </p> 

    <p> 
    <%= form.label :rooms_count %><br> 
    <%= form.number_field :rooms_count %> 
    </p> 

    <p> 
    <% form.fields_for :rooms do |f|%> 
     <p> 
     **THE CODE** 
     </p> 
    <% end %> 
    </p> 

    <p> 
    <%= form.submit %> 
    </p> 
<% end %> 

答えて

0

私は私の質問に対する解決策を見つけました。

def create 
    @hotel = Hotel.new(hotel_params) 
    @hotel.rooms_count.times do 
     @hotel.rooms.build 
    end 

    if @hotel.save 
     redirect_to @hotel 
    else 
     render 'new' 
    end   
    end 

それは部屋に入力された番号がフォームのフィールドをカウント@ hotel.rooms_countとしての@ hotel.rooms.buildな回数を実装しています。

1

fields_forヘルパーで「ERBエコーサイン」(=)を忘れてしまった。

正しいフォーム:

<%= form.fields_for :rooms do |f|%> 
関連する問題