2017-11-29 13 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入力フィールドにも入っていないので、選択した値を別のモデル/テーブルに入力することができます。

EDIT

これは、渡されたパラメータのアプリケーショントレースです。私は適切にネストされた属性を使用していませんでした実現

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"} 

EDIT 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_pa​​rams'は既にAAメソッドです。ここではあなたのコード内でオーバーライドしています。 – inveterateliterate

答えて

2

Hmm。これを少し砕いてみましょう。 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のことができるように、フォームからの値が表示されるはずである場合。

私が何かを見逃してしまった場合に備えて、踏み台で踏み込んでみてください。

+0

私はブライスの頭の中であなたの団体をひっくり返しました。この回答はあなたが望むものを得るはずです。もしそうなら、それを受け入れてください。私は私の答えを削除しています。 – inveterateliterate

+0

これはうまくいきました。私は 'attr_accessor:license_number'の部分を完全に見逃していました。それが私のために働いていなかった理由です。皆さんのお手伝いをありがとうございます。 –

関連する問題