Ruby on rails ActiveAdmin创建方法

Ruby on rails ActiveAdmin创建方法,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,我试图在AA中添加到我的create控制器,但我一直收到错误,而且它也没有传递我的表单值 管理/车辆许可证.rb permit_params :utf8, :vehicle_permit_id, :vehicle, :date_issued, :issued_by, :date_entered, :entered_by, vehicle_attributes: [:license_number, :vehicle_permit_id] form do |f| f.inputs

我试图在AA中添加到我的create控制器,但我一直收到错误,而且它也没有传递我的表单值

管理/车辆许可证.rb

permit_params :utf8, :vehicle_permit_id, :vehicle, :date_issued, :issued_by, :date_entered, :entered_by,
    vehicle_attributes: [:license_number, :vehicle_permit_id]

form do |f|
    f.inputs do
        f.has_many :vehicle, new_record: false do |veh|
            veh.input :license_number, :collection => Vehicle.all.map{ |vehicle| [vehicle.license_number]}
        end
        f.input :vehicle_permit_id
        f.input :date_issued, as: :date_picker
        f.input :issued_by
    end
    f.actions
end

controller do
    def new
        @vehicle_permit = VehiclePermit.new
        @vehicle = @vehicle_permit.build_vehicle 
    end 

    def create

         vehicle = Vehicle.find_by(license_number: vehicle_permit_params[:vehicle_attributes][:license_number])
         @vehicle_permit = current_user.vehicle_permit.build(vehicle_permit_params.merge(date_entered: Date.today, entered_by: current_admin_user.email[:vehicle_permit])
         @vehicle_permit.update(vehicle: vehicle)
         super
    end

    def update
        super           
    end

    def vehicle_permit_params
        params.permit vehicle_permit: [:vehicle_permit_id, :date_issued, :issued_by, :date_entered, :entered_by,  vehicle_attributes: [:license_number]]
    end

    def set_vehicle_permit
        @vehicle_permit = VehiclePermit.find(params[:id])
    end
end
我正在尝试将当前日期添加到date_entered字段中,并将当前管理员用户电子邮件值添加到entered by字段中。我得到的错误是车辆许可证为零,所以我不知道为什么它没有通过我指出的参数。表单也没有传入
:vehicle
输入字段,我不确定如何获取该字段,以便将选择的值输入到不同的模型/表格中

编辑

这是所传递参数的应用程序跟踪

app/admin/vehicle_permit.rb:60:in `create'
Request

Parameters:

{"utf8"=>"✓","authenticity_token"=>"JeyVHNsSyGi4U22RbsplTexSawKEj3QYAItAFNXrn601zL0n6nu+pkCObkTmY0Du3wd1TN3BWLXaGyGt48glUw==",
"vehicle_permit"=>{"vehicle_permit_id"=>"AU-4444", "date_issued"=>"", 
"issued_by"=>""},
"commit"=>"Create Vehicle permit"}
编辑2
我意识到我没有正确地使用嵌套属性,我编辑了我的表单,使其具有来自车辆的嵌套属性license_编号。现在我在我的
find_by
中得到了一个零返回值,我不确定为什么它没有在车辆表中找到车辆。

嗯。让我们稍微细分一下。请尝试为许可证编号设置一个虚拟的“virtual”字段,而不是
has\u many
。您可能需要车辆许可证上的属性访问器:许可证号码

form do |f|
    license_collection = Vehicle.all.map{ |vehicle| [vehicle.license_number] }
    f.inputs do
        f.input :license_number, collection: license_collection
        # f.input :vehicle_permit_id # Not needed??
        f.input :date_issued, as: :date_picker
        f.input :issued_by
    end
    f.actions
end
许可参数应遵循表单的结构,而不是模型

permit_params :date_issued, :issued_by, :license_number # form fields only
# There should be no need for any other permit methods
如果一切正常,您应该能够
放置参数。检查
创建
顶部的
,并查看表单中的值

def create
  license_number = params[:vehicle_permit].delete(:license_number)

  build_resource # this should set resource = VehiclePermit.build(params[:vehicle_permit])

  resource.vehicle = Vehicle.find_by(license_number: license_number)
  resource.date_entered = Date.today
  resource.entered_by = current_user

  super
end

试着用撬棍和/或用puts inspect进行检查,以防我遗漏了什么。

为什么这里有:当前管理员用户输入的:vehicle_permit
。电子邮件[:vehicle_permit]
,因为当我没有这样做时,我得到的是“无法通过
UTF8
属性错误。嘿,你能再看一下这个先前的答案吗?我看到你仍然以不同的方式定义你的收藏标签(但我想让我知道你是如何做的)。另外,再看一看ActiveAdmin文档()
Allowed_params
已经是AA方法,您正在代码中覆盖它。如果仍然有问题,您可以发布传入的参数吗?我发布了通过的参数。我还编辑了
许可参数
,并将其更改为
车辆许可参数
,这是我以前拥有的。我知道
allowed_params
是一种AA方法,我真的只是尝试了不同的名称/方法来让它发挥作用。布莱斯,我在脑海中翻过了你的联想。这个答案会让你得到你想要的,如果是的话,请接受它。我正在删除我的答案。这起作用了,我完全错过了
attr\u accessor:license\u number
部分,这就是为什么表单对我不起作用的原因。非常感谢你们两位的帮助。