Попытка сделать форму, используя вложенные атрибуты
Я новичок в рельсах, так что я застрял с вложенными атрибутами.
Вот обзор того, что я ищу:
Прокатный автомобиль может создавать автомобили. (Сделано)
Клиенты могут забронировать автомобиль.
Клиенты создаются с бронированием одновременно с арендованным автомобилем.
Я пытаюсь создать форму для бронирования, которая будет содержать информацию как о клиенте, так и о бронировании, так как всю информацию будет заполнять арендованный автомобиль.
Вот почему мне нужно использовать вложенные атрибуты, но до сих пор у меня возникают некоторые трудности. У меня есть четыре модели:
class Car < ActiveRecord::Base
belongs_to :rentalcar
has_many :photos
has_many :reservations
end
.
class Client < ActiveRecord::Base
has_many :reservations
end
.
class Reservation < ActiveRecord::Base
belongs_to :client
belongs_to :car
end
.
class rentalcar < ActiveRecord::Base
has_many :cars
has_many :reservations
end
Форма :
<%= form_for([@car, @car.reservations.new]) do |f| %>
<div class="row">
<div class="col-md-12 price_tag">
<span><%= @car.price %>Dhs</span>
<span class="pull-right">Par jour</span>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>Nom</label>
<%= f.text_field :nom, placeholder: 'Nom', class: 'form-control' %>
</div>
<div class="col-md-6">
<label>Prenom</label>
<%= f.text_field :prenom, placeholder: 'Prenom', class: 'form-control', disabled: 'true' %>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>CIN</label>
<%= f.text_field :cin, placeholder: 'CIN', class: 'form-control' %>
</div>
<div class="col-md-6">
<label>Age</label>
<%= f.text_field :age, placeholder: 'Age', class: 'form-control', disabled: 'true' %>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>Ville</label>
<%= f.text_field :ville, placeholder: 'Ville', class: 'form-control' %>
</div>
<div class="col-md-6">
<label>Télephone</label>
<%= f.text_field :telephone, placeholder: 'Telephone', class: 'form-control', disabled: 'true' %>
</div>
</div>
<div class="row">
<div class="col-md-6">
<label>Email</label>
<%= f.text_field :email, placeholder: 'Email', class: 'form-control' %>
</div>
</div>
<%= f.fields_for :reservations do |reservation_form| %>
<div class="row">
<div class="col-md-6">
<label>Check In</label>
<%= reservation_form.text_field :start_date, readonly: 'true', placeholder: 'Start Date', class: 'form-control' %>
</div>
<div class="col-md-6">
<label>Check Out</label>
<%= reservation_form.text_field :end_date, readonly: 'true', placeholder: 'End Date', class: 'form-control', disabled: 'true' %>
</div>
</div>
<%= reservation_form.hidden_field :car_id, value: @car.id %>
<%= reservation_form.hidden_field :price, value: @car.prix %>
<%= reservation_form.hidden_field :total, id: 'reservation_total' %>
<% end %>
<h4><span id="message"></span></h4>
<div id="preview" style="display: none">
<table class="reservation-table" >
<tbody>
<tr>
<td>Day(s)</td>
<td><span id="reservation_days"></span></td>
</tr>
<tr>
<td>Total</td>
<td><span id="reservation_sum"></span>Dhs</td>
</tr>
</tbody>
</table>
<br>
</div>
<br>
<%= f.submit "Book Now", id:"btn_book", class: "btn btn-primary wide", disabled: 'true' %>
Так что идея состоит в том, чтобы получить эту форму после выполнения чего-то вроде: cars / 1 / reservate. И у нас будет что-то вроде этого в контроллере:
def reservate
@car = Car.find(params[:id])
@client = Client.new
@client.reservations.build
end
но я не знаю, в каком контроллере он должен оставаться
Edit1:
Индексы:
add_index "reservations", ["client_id"], name: "index_reservations_on_client_id", using: :btree
add_index "reservations", ["car_id"], name: "index_reservations_on_car_id", using: :btree
add_index "voitures", ["rentelcar_id"], name: "index_voitures_on_rentelcar_id", using: :btree
add_foreign_key "reservations", "clients"
add_foreign_key "reservations", "cars"
add_foreign_key "cars", "rentelcars"