2017-11-29 19 views
0

AA에 컨트롤러를 작성하려고하는데 오류가 계속 발생하며 내 양식 값 중 하나를 전달하지 않습니다.ActiveAdmin 작성 방법

나는 date_entered 필드에 현재 날짜를 추가하려고

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 

관리/vehicle_permit.rb, 그리고 필드가 입력에 현재 관리자 사용자 이메일 값입니다. 나는 vehicle_permit이 NIL이라는 오류를 얻고 있으므로 왜 내가 지시 한 매개 변수를 전달하지 않는지 알 수 없습니다. 이 양식은 :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_number 중첩 된 속성을 가지고 내 양식을 편집했다. 이제는 내 find_by에 아무런 반환을받지 못하고 있으며 왜 차량 테이블에서 차량을 찾지 못하고 있는지 잘 모르겠습니다.

+0

당신은 왜 여기에 vehicle_permit을 가지고 있습니까? entered_by : current_admin_user.email [: vehicle_permit]' – xeon131

+0

내가하지 않았을 때, 저는 UTF8 속성 오류를 전달할 수 없었습니다. –

+0

안녕하세요,이 이전 답변을 다시 볼 수 있습니까? https://stackoverflow.com/questions/47497300/activeadmin-passing-variable-in-controller 나는 여전히 수집 태그를 다르게 정의하는 것을 볼 수있다. (하지만 내가 어떻게하는지에 대한 정보가 있으면 알려주 리라 생각된다.) . ActiveAdmin 문서 (https://activeadmin.info/2-resource-customization.html)를 다시 한 번 살펴보십시오. 'permitted_params'는 이미 AA 메소드입니다. 코드에서이 메소드를 오버라이드하고 있습니다. – inveterateliterate

답변

2

흠. 이걸 좀 어기 죠. has_many 대신 license_number에 가상 '필드를 가짜로 사용하십시오. VehiclePermit에 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 

모두는 create의 상단에 puts params.inspect 할 수 및 형태의 값을 볼 수 잘합니다.

무언가를 놓친 경우에 대비하여 pry로 스테핑을 시도하고 puts 검사로 뿌리십시오.

+0

브라이언스, 내 머리 속에서 당신의 연상을 바꿨습니다. 이 답변을 통해 원하는 것을 얻을 수 있습니다. 그렇다면 동의하십시오. 내 대답을 지우고 있습니다. – inveterateliterate

+0

이 작업은'attr_accessor : license_number' 부분을 완전히 잃어 버렸습니다. 그래서 그 부분이 나를 위해 작동하지 않습니다. 도와 주셔서 대단히 감사합니다. –