我有两个模型,Hotel
和Room
。我想创建一个表格,允许我添加一个新的酒店和房间,表明酒店的名称和房间的数量。
我知道我应该使用“嵌套表单”,但我很难正确实现它。
这是我的代码:
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 :(得分:1)
你忘记了&#34; ERB回音标志&#34; =
帮助器上的{fields_for
}。
正确的表格:
<%= form.fields_for :rooms do |f|%>
答案 1 :(得分: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.build,与表格中的Rooms Count字段中输入的@ hotel.rooms_count数字一样多次。