URL http:// localhost:3000 / Operations / OPERATION_ID / agents / AGENT_ID / jobs / Meterpreter / newで新しいジョブを作成しようとすると
undefined method `operation_agent_meterpreters_path' for #<#<Class:0x007ff2f7822638>:0x007ff2f9a7e0d8>
Did you mean? operation_agent_jobs_meterpreter_path
私は次のルートを持っています
Rails.application.routes.draw do
get 'agents/index'
get 'agents/show'
devise_for :users
resources :operations do
resources :agents do
namespace :jobs do
resources :meterpreter
end
end
end
root 'operations#index'
end
ジョブ内のコントローラー/
class Jobs::MeterpreterController < ApplicationController
def new
@operation = Operation.find params[:operation_id]
@agent = Agent.find params[:agent_id]
@job = MeterpreterJob.new agent: @agent
end
private
def jobs_params
params.require(:job).permit(:ip, :port)
end
end
モデル
class Jobs::Meterpreter < Job
jsonb_accessor :options,
ip: :string,
port: :integer
#== VALIDATIONS
validates :ip, :port, presence: true
end
そして、jobs / Meterpreter /new.html.erbのフォームのビュー
<div class="card">
<h4 class="card-header">New Meterpreter Job</h4>
<div class="card-body">
<%= form_with model: [@operation, @agent, @job] do |form| %>
<div class="form-row">
<div class="col-8">
<label for="name" class="col-form-label">Name:</label>
<%= form.text_field :ip, class: "form-control", placeholder: "0.0.0.0", required: true %>
</div>
<div class="col-4">
<label for="name" class="col-form-label">Name:</label>
<%= form.text_field :port, class: "form-control", placeholder: "443", required: true %>
</div>
</div>
<%= form.submit "Create", class: "btn btn-primary mt-4" %>
<% end %>
</div>
</div>
すべてのルートhttps://gist.github.com/drale2k/a25c4cbffe8c5e6446df2141a393cd17
現在のところ、このコードにはいくつか問題があります。
ルートでは、resources
との間に複数の不一致があり:meterpreter
ます。システムに複数のMeterpreterジョブがある場合は、両方とも複数形である必要があります。resources :meterpreters
。
コントローラは、Railsの規則に従って、常に複数の名前を付ける必要があります。Jobs::MeterpretersController
。コントローラファイルとビューフォルダの名前も変更する必要があります。
Jobs::Meterpreter
との間に名前の不一致がありMeterpreterJob
ます。私はそこで何が起こっているのか分かりません、私は彼らが同じであるはずだと思います。
しかし、主な問題については:
:jobs
。つまり/jobs/
、URLの一部である必要がありますが、その名前空間をform_with
タグに含めていません。名前空間を含める必要があります。<%= form_with model: [@operation, @agent, :jobs, @job] do |form| %>
また、のようなURLが本当に必要かどうかを自問します/operations/123/agents/345/jobs/meterpreters/567
。これは非常に長いURLであり、簡潔にするために削除する必要のある不要な情報が含まれている可能性があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加