我有两种型号的许可证和车型。车辆表具有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放入同一行?
答案 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_for
和accepts_nested_attributes_for
。