ActiveAdmin 创建方法
ActiveAdmin create method
我正在尝试添加到我在 AA 中创建的控制器,但我一直收到错误,而且它也没有传递我的表单值之一。
admin/vehicle_permit.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 字段中,并将当前管理员用户电子邮件值添加到输入者字段中。我得到的错误是 vehicle_permit 是 NIL,所以我不知道为什么它没有传递我指定的参数。表单也没有传入 :vehicle
输入字段,我不确定如何获取它,所以我可以将选择的值输入到不同的 model/table。
编辑
这是传递参数的应用程序跟踪。
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_number。现在我在我的 find_by
中得到一个 nil return,我不确定为什么它没有在车辆 table.
中找到车辆
嗯。让我们稍微分解一下。而不是 has_many
尝试只为 license_number 设置一个虚拟 'virtual' 字段。您可能需要 attr_accessor :license_number 车辆许可证。
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 应该遵循表格的结构,而不是模型。
permit_params :date_issued, :issued_by, :license_number # form fields only
# There should be no need for any other permit methods
如果一切顺利,您应该能够 puts params.inspect
在 create
的顶部并查看表格中的值。
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
试着用 pry 逐步完成 and/or 加上 puts inspect 以防我遗漏了什么。
我正在尝试添加到我在 AA 中创建的控制器,但我一直收到错误,而且它也没有传递我的表单值之一。
admin/vehicle_permit.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 字段中,并将当前管理员用户电子邮件值添加到输入者字段中。我得到的错误是 vehicle_permit 是 NIL,所以我不知道为什么它没有传递我指定的参数。表单也没有传入 :vehicle
输入字段,我不确定如何获取它,所以我可以将选择的值输入到不同的 model/table。
编辑
这是传递参数的应用程序跟踪。
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_number。现在我在我的 find_by
中得到一个 nil return,我不确定为什么它没有在车辆 table.
嗯。让我们稍微分解一下。而不是 has_many
尝试只为 license_number 设置一个虚拟 'virtual' 字段。您可能需要 attr_accessor :license_number 车辆许可证。
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 应该遵循表格的结构,而不是模型。
permit_params :date_issued, :issued_by, :license_number # form fields only
# There should be no need for any other permit methods
如果一切顺利,您应该能够 puts params.inspect
在 create
的顶部并查看表格中的值。
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
试着用 pry 逐步完成 and/or 加上 puts inspect 以防我遗漏了什么。