2017-11-26 9 views
0

私には許可と車両モデルがあります。私は私のレールアプリでそれを持って動作するようにAAの作成コントローラを更新しようとしています。それは、入力された車両license_numberを取得してそれを許可テーブルに入力し、次に入力されたpermit_idを取得し、車両テーブルに関連する車両の許可属性にそれを入力することである。私は取得していますコントローラで変数を渡すActiveAdmin

管理/ permit.rb

permit_params :permit_id, :vehicle, :date_issued, :issued_by, :date_entered, :entered_by 

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

controller do 
    def new 
     @permit = Permit.new 
     @vehicle = @permit.build_vehicle 
     @vehicle = Vehicle.all 
     super 
    end 

    def create 
     vehicle = Vehicle.find_by(license_number: permit_params[:vehicle_attributes][:license_number]) 
     @permit = current_user.permit.build(permit_params.merge(date_entered: Date.today, 
      entered_by: current_user_admin.email)) 
     super 
    end 
end 

私のエラー、それはpermit_idためにlicense_numberを入力しているし、またpermit_paramsが定義された変数ではないと言っているということです。どんな助けも素晴らしいでしょう、ありがとう!

答えて

0

ここでは面白いケースがあります。Permitというモデルがあり、通常はRailsでparamsメソッドの名前をpermit_paramsと指定すると混乱します。結局のところ、permit_paramsはActiveRecordのが強いのparamsを実装するための一般的なメソッドシグネチャである:それとhttps://activeadmin.info/2-resource-customization.html

を、代わりにあなたのcreateアクションでpermit_paramsを呼び出すので、あなたはpermitted_params[:vehicle_attributes][:license_number]を呼び出す必要があります。そのため、定義されていない変数としてpermit_paramsを検討しています。ここでも、これらの2つのメソッドシグネチャはすべてのActiveAdminフォームで同じになります。

また、これは入力ミスではありませんが、newメソッドでは@vehicleを2回定義しています。あなたがネストされたフォームをやっていない限り、あなたが許可フォームのための車両を作る必要があるかどうかは分かりません。いずれにせよ、私は最後の行は、次にまた、あなたのフォームフィールドのcollection一部でアップデートを使用する可能性がある、あなたの形でそれを使用することができます@vehicles = Vehicle.allを読むべきだと思う:

form do |f| 
    f.inputs do 
    f.input :permit_id 
    f.input :vehicle, collection: @vehicles.map { |vehicle| [vehicle.license_number, vehicle.id] } 
    f.input :date_issued, as: :date_picker 
    f.input :issued_by 
    end 
    f.actions 
end 

collection_select formタグが最初となります項目の値をフォームに表示される値として使用し、2番目の値はパラメータ(https://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select)で渡される値になります。

次に、あなたのcreateアクションで、あなたはIDと車両を見つけることができます。

Vehicle.find(permitted_params[:vehicle_attributes][:vehicle_id])

0

私はVehiclePermitを使用してみてください、モデル名として許可を避けるだろう。

関連する問題