尝试使用嵌套属性制作表单

2024-02-02

我是 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 

表格 :

<%= 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"

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

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

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

  <br>
  <%= 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]]
 => #<Client id: 1, full_name: "remis", age: 22, email: "[email protected] /cdn-cgi/l/email-protection", phone_number: "1231331", created_at: "2016-06-13 06:28:37", updated_at: "2016-06-13 06:28:37">
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用嵌套属性制作表单 的相关文章

  • 使 diff-lcs 的输出可读

    我正在使用 diff lcs gem 输出两个 html 内容体之间的差异 这是示例内容 版本一 p Paragraph one Sentence one p p Paragraph two Another sentence p p Par
  • Rails 3 ActiveModel:无法直接包含 ActiveModel::Model

    在我的 Rails 3 2 11 和 开发 环境中 当我尝试拥有活动模型时 class DisponibilityApi include ActiveModel Model attr accessor start time end time
  • 无主键的 ActiveRecord 模型

    我有一个 ActiveRecord 模型GPA没有主键 class GPA lt ActiveRecord Base end 当我尝试打电话时GPA first to json I get TypeError false is not a
  • 在虾中使用列表

    我使用 prawn 创建 pdf 文件 其中包含大量表格格式的数据和一些列表 列表的问题在于 我只是使用文本作为列表 因为没有与 ul gt li 列表等效的语义 就像我在 webfrointend 中使用它们一样 所以这些清单是不合理的
  • 运行“bundle install”失败并要求我运行“bundle install”

    事实上 当从我从 git 存储库克隆的现有 Rails 应用程序内部运行时 所有与 gem 相关的命令都会导致相同的错误消息 bundle install Could not find tzinfo 0 3 27 in any of the
  • ruby 无法复制 Fixnum

    我有一些这样的代码 ssh files id rsa pub id rsa ssh files each with index do item index ssh files index generate ssh path creator
  • 葡萄错误处理策略?

    我正在使用 Grape 和 Rails 创建 REST API 我已经有了基本的架构 并且正在寻找可以 清理 东西的地方 其中之一是错误处理 处理 我目前正在修复整个 API 的 root rb GRAPE API 基类 文件中的错误 我对
  • 如何在Rails中显示URL指向的图像

    我这里有一张图片http power itp ac cn jmyang funny fun4 jpg http power itp ac cn jmyang funny fun4 jpg我想在我的 Rails 站点中显示它 我该怎么做 您还
  • 在environment.rb中设置的常量在开发模式下消失

    了解 Rails 缓存如何工作的人可以真正帮助我 这是嵌套在 Rails Initializer run 块内的代码 config after initialize do SomeClass const set SOME CONST SOM
  • before_filter set_locale 除了控制器

    My routes rb MyApp Application routes draw do scope locale do all resources here end namespace blog do resources posts o
  • 设计没有路由与指定删除的链接中的 [GET]“/users/sign_out”匹配

    因此 我四处寻找解决此问题的方法 大多数人似乎都说了同样的话 但对解决我的问题没有多大作用 我已在链接中指定了删除方法 但路由错误表明这是一个 GET 请求 知道为什么下面的链接最终会覆盖 忽略方法声明吗 Routes devise for
  • ActiveStorage::FileNotFoundError 但文件确实存在

    我正在开发这个 Rails 6 0 21 应用程序 ruby 2 5 5 并使用 puma 3 12 2 作为开发 Web 服务器和具有本地磁盘服务的 ActiveStorage 我的应用程序时不时地出错ActiveStorage File
  • 如何防止Rails“复数”列名?

    我正在使用 dwilkie 的外国人 http github com dwilkie foreignerRails 插件 我有一个表创建语句 如下所示 create table agents games force gt true id g
  • 获取类别和子类别的所有产品(rails、awesome_nested_set)

    正在开发一个电子商务应用程序 我试图解决以下问题 我通过 Awesome nested set 插件实现了我的类别 如果我通过选择一个类别列出我的文章 一切正常 但对于某些链接 我想显示一个类别的所有产品及其子类别的产品 这是仅适用于一种类
  • 在 Rails 中,如何创建用户组作为另一个关联,例如“成员”?

    我正在尝试在两个现有模型之间创建特殊关系 User and Dwelling A Dwelling只有一个所有者 Dwelling belongs to user User has one dwelling 在创建时 但其他用户可以添加到此
  • 如何在 Rails 中对不同用户建模

    Question 我有一个带有内置授权和身份验证逻辑的用户模型 现在我意识到我拥有三种不同类型的用户 我想存储每个人的不同信息 Rails 中处理这个问题的最佳方法是什么 基于当前阅读的想法 我看过 STI 但从我读到的内容来看 它是不合适
  • Mac 上的 libv8 (3.11.8.17) 捆绑包安装错误

    我将 ruby 升级到 1 9 3 现在我无法启动我的服务器 当我运行捆绑安装时 它说 An error occurred while installing libv8 3 11 8 17 and Bundler cannot contin
  • 导轨、定制探测器

    所以我希望能够使用来获取一个对象find by id or name 我觉得我看到了另一个这样的问题 但很难找到任何资源来制作我自己的查找器 您可以通过向模型添加类方法来做到这一点 例如 class Model lt ActiveRecor
  • ActiveRecord::Enum - PG::InvalidTextRepresentation:错误:整数输入语法无效:

    我遇到了一个奇怪的错误 希望有人能指出我正确的方向 我有一个名为 组织 的模型和一个名为 组织 的属性department 请参阅下面的架构摘录 t integer department default 0 在我的模型内部已经定义了这个属性
  • Rails apns 用于向 Apple ipad 推送通知 - 使用哪个 gem?

    我希望从 Rails 3 0 3 应用程序向苹果推送通知 我发现了各种 apns ish 宝石 包括 apns on rails 其中一些似乎有点旧 1 或 2 年 并且非常不清楚 2012 年使用的 当前 是什么 根据我的标准 您能推荐使

随机推荐

  • Node.js 续集关联,包含条件

    是否可以在 findAll 查询的包含数组中传递条件 例如 我有 UsersModel PostsModel 和 UserVotesModel 用户可以对帖子进行投票 对于登录用户 我想查询帖子并仅包含当前用户的投票 我无法使用 Seque
  • 在Notepad++中选择换行符

    我注意到 当我加载文本文件时 Notepad 将识别并使用该文件中的任何换行符 n or r n 是否有一些选项可以让我选择默认情况下用于新文档的选项 我查看了帮助并用谷歌搜索 但找不到任何东西 对于任何新文档 Settings gt Pr
  • 如何用MySQL生成随机字符并插入? [复制]

    这个问题在这里已经有答案了 复制 向 MYSQL 数据库插入随机字符 https stackoverflow com questions 2498310 inserting random characters to mysql databa
  • Django Apache/mod_python 管理 CSS 未与管理表一起出现

    我的 Windows XP Django apache mod python 在本地主机上运行 除了管理 CSS 不渲染之外 所有部分都正常工作 管理员可以工作 但没有 html 格式 我做了补充 settings py INSTALLED
  • 字符串内容相同,但 equals 方法返回 false

    我正在使用 StringEscapeUtils 来转义和取消转义 html 我有以下代码 import org apache commons lang StringEscapeUtils public class EscapeUtils p
  • 如何将二进制数据“按原样”写入注册表(即:我仅将可见的二进制数据作为来自注册表编辑器的字符串)

    我一直在谷歌上搜索这个问题 一整天都没有找到可行的解决方案 我对二进制数据类型一无所知 因为我从来没有故意使用过它们 并且我正在尝试将我在注册表中看到的二进制值写入注册表 现在 我看到的只是以下内容 如下所示 如果我尝试将其作为字符串传递给
  • 如何合并二进制文件?

    我的my branch中有一个二进制文件 当我需要对其进行更改时 git当然不会合并它 所以我现在做的是 git checkout my branch make a change to gui bin mv gui bin git comm
  • k3d 尝试拉取 Docker 镜像而不是使用本地镜像

    只需在本地机器 Linux Mint 20 2 上研究K8S的核心即可 使用以下命令在本地创建一个节点集群 k3d集群创建mycluster 现在我想在容器中运行 spring boot 应用程序 我构建本地图像 库 0 1 0 这是摘自D
  • 如何摆脱 jQuery 数据表插件的分页?

    我怎样才能删除分页 and showjQuery 的特点数据表 http datatables net 我只想要它的搜索和排序功能 并想摆脱其他功能 有什么办法吗 如果你不使用 jQuery UI 主题 你可以这样做 document re
  • 如何删除Android Room数据库的文件?

    我已经实现了一个房间数据库 它是从资源文件中分发的SQLite资产助手 https github com jgilfelt android sqlite asset helper第一次启动应用程序时 数据库包含游戏状态数据 因此如果玩家想要
  • 如何生成字母表数组?

    在 Ruby 中我可以做 a z to a to get a b c d z JavaScript 是否提供类似的构造 我个人认为最好的是 alphabet abcdefghijklmnopqrstuvwxyz split 简洁 有效 易读
  • 在 Java 中转换字符

    我正在学习Java 我发现表达式通常必须转换为某种类型才能正确执行 例如 在算术计算期间 字节被提升为整数 因此以下表达式将引发错误 byte b 10 int i i b b ok assigning an integer evaluat
  • 核心文本 - 从 NSRange 获取像素坐标

    我怎样才能得到一个CGRect从一个NSRange对于使用 Core Text 渲染的文本 我正在使用核心文本NSAttributedString 这是绝对的痛苦 但可以做到 您需要使用以下命令获取框架中的所有线条CTFrameGetLin
  • 我正在使用 Redux。我应该管理 Redux 存储中的受控输入状态还是在组件级别使用 setState?

    我一直在试图找出管理我的反应表单的最佳方法 我尝试使用 onChange 来触发操作并使用表单数据更新我的 redux 存储 我还尝试创建本地状态 当提交表单时 我触发并执行操作并更新 redux 存储 我应该如何管理我的受控输入状态 我喜
  • NodeJS 套接字有时可以工作

    因此 我有一个节点服务器 运行expressjs io 使用socket io 并且我正在构建一个跟踪数据库中坐标的网格地图 只是 我遇到了一个特殊的问题 因为我的套接字只监听有时 起初没有错误消息 只是偶然我让页面运行并收到此错误 Unc
  • 内核和用户模式之间共享内存。如何共享句柄?

    我正在尝试在用户进程和内核之间使用共享内存 选项一 让内核创建部分并让用户模式应用程序通过名称 Global my mem 打开内存 它仅在只读模式下工作 当我尝试使用 FILE MAP WRITE 打开部分时 它会拒绝访问 5 不确定如何
  • EF 向后兼容数据库迁移

    我试图弄清楚如何使用 EF 代码优先和迁移来实现以下部署场景 我的想法是 我想通过向后兼容的架构更改来升级数据库 例如 添加一列 并测试一切是否仍然有效 它受到绿色 蓝色部署的启发 但并不完全遵循该模式 这背后的原因是遵循这个过程 升级数据
  • 为什么 Chrome 中的页面上没有加载所有视频?

    http graysonearle com bluemen http graysonearle com bluemen 使用 webkit 浏览器单击它 加载时应该会出现 4x4 的视频网格 但 Chrome 上往往只会加载 1 3 个视频
  • 如何查询android设备硬件信息

    我如何获取 Android 设备硬件信息 如 CPU 架构 速度 霓虹灯 GPU 名称 制造商 RAM 大小 我希望有一种方法可以使用 ndk 本地执行此操作 但如果只能通过 java 代码实现 那么如何执行此操作 您需要使用Build h
  • 尝试使用嵌套属性制作表单

    我是 Rails 的初学者 所以我对嵌套属性很困惑 以下是我正在寻找的内容的概述 租车可以创造汽车 完成 客户可以预订汽车 租赁汽车在预订的同时创建客户 我正在尝试制作一份预订表格 其中包含客户和预订信息 因为租赁汽车将填写所有信息 这就是