Rails嵌套表单属性未以表单形式显示

时间:2017-11-15 20:02:56

标签: mysql ruby-on-rails forms

我有两种型号的许可证和车型。车辆表具有permit_id的外键。我试图将permit_id输入到车辆表中,其中表格上输入的license_number等于车辆表中的license_number(不是主键)。

vehicle.rb

class Vehicle < ApplicationRecord
self.primary_key = :vehicle_id
belongs_to  :permit, optional: true

permit.rb

class Permit < ApplicationRecord
self.primary_key = :permit_id
has_one :vehicle
accepts_nested_attributes_for :vehicle

permits_controller.rb

class PermitsController < ApplicationController
...
def new
  @permit = Permit.new
  @vehicle = @permit.build_vehicle
end
params.require(:permit).permit(:permit_id.,...,vehicle_attributes: [:license_number])

许可表格

<%= form_with(model: permit, local: true) do |form| %>
...
<div class="field">
  <% form.fields_for :vehicle do |f| %>
    License:
    <%= f.text_field :license_number, id: :vehicle_license_number %>
  <% end %>
</div>

我的第一个问题是我的嵌套属性license_number在我的字段中根本没有出现。我可以在chrome元素中看到div,但文本字段没有显示出来。我的第二个问题是如何在车辆表中搜索license_number等于输入的许可证号码,然后将permit_id放入同一行?

1 个答案:

答案 0 :(得分:1)

我不知道是什么原因造成您的第一个问题,但您应该将id: :vehicle_license_number部分退出并添加f.label的实际标签。

要查找车辆,您可以使用vehicle = Vehicle.find_by(license_number: permitted_params[:vehicle_attributes][:license_number],然后使用@permit.update(vehicle: vehicle)保存。话虽如此,我认为您不需要使用filed_foraccepts_nested_attributes_for