尝试使用嵌套属性创建表单

我是rails的初学者,所以我完全坚持使用嵌套属性。

以下是我正在寻找的内容概述:

租车可以制造汽车。(完成)

客户可以预订一辆车。

租赁车辆同时预订客户。

我正在尝试制作一份预订表格,其中包含客户和预订信息,因为它将是租车人员填写所有信息。

这就是为什么我需要使用嵌套属性,但直到现在我遇到了一些困难。 我有四个型号:

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 

表格 :

  
 
Dhs Par jour

Day(s)
Total Dhs


所以我的想法是在做了类似的事情之后得到这个forms:cars / 1 / reservate。 我们将在控制器中有这样的东西:

 def reservate @car = Car.find(params[:id]) @client = Client.new @client.reservations.build end 

但我不知道它应该保留在哪个控制器中

编辑1:

指数:

 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" 

我相信你们的关系有点混乱,这就是我创造新关系的方式。

 class AddRelevantModels < ActiveRecord::Migration def change create_table :car_rentals do |t| t.string :name t.timestamps null: false end create_table :cars do |t| t.string :model t.string :car_number t.belongs_to :car_rental, index: true, foreign_key: true t.timestamps null: false end create_table :clients do |t| t.string :full_name t.integer :age t.string :email t.string :phone_number t.timestamps null: false end create_table :reservations do |t| t.belongs_to :car, index: true, foreign_key: true t.belongs_to :client, index: true, foreign_key: true t.datetime :start_date t.datetime :end_date t.timestamps null: false end end end 

car_rental.rb

 class CarRental < ActiveRecord::Base has_many :cars end 

car.rb

 class Car < ActiveRecord::Base has_many :reservations has_many :clients, through: :reservations end 

reservation.rb

 class Reservation < ActiveRecord::Base belongs_to :client belongs_to :car accepts_nested_attributes_for :client accepts_nested_attributes_for :car end 

client.rb

 class Client < ActiveRecord::Base has_many :reservations has_many :cars, through: :reservations end 

reservations_controller.rb

 class ReservationsController < ApplicationController def new @reservation = Reservation.new @reservation.build_client end def create @reversation = Reservation.new(reservation_params) if @reversation.save render :show, id: @reservation else render :new end end private def reservation_params params.require(:reservation) .permit( :start_date, :end_date, client_attributes: [:full_name, :age, :email, :phone_number] ) end end 

reservations/new.html.erb

 

Reservations

<%= form_for(@reservation) do |f| %> <%= f.label :start_date %> <%= f.text_field :start_date %>
<%= f.label :end_date %> <%= f.text_field :end_date %>
<%= f.fields_for :client do |client_field| %> <%= client_field.label :full_name %> <%= client_field.text_field :full_name %>
<%= client_field.label :age %> <%= client_field.text_field :age %>
<%= client_field.label :email %> <%= client_field.text_field :email %>
<%= client_field.label :phone_number %> <%= client_field.text_field :phone_number %> <% end %>
<%= f.submit %> <% end %>

现在,如果您提交表单,您可以在数据库中看到客户端也已保存用于预订。

  Reservation.first.client Reservation Load (0.5ms) SELECT "reservations".* FROM "reservations" ORDER BY "reservations"."id" ASC LIMIT 1 Client Load (0.4ms) SELECT "clients".* FROM "clients" WHERE "clients"."id" = $1 LIMIT 1 [["id", 1]] => #