2017-10-24 3 views
0

내가 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 

에서 새 작업을 만들려고 나는이 작업/

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 
에서 다음과 같은 노선

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::Meterpreter < Job 
    jsonb_accessor :options, 
     ip: :string, 
     port: :integer 

    #== VALIDATIONS 
    validates :ip, :port, presence: true 
end 

그리고 작업/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

+0

'rails routes'의 출력을 공유 하시겠습니까? – Aakanksha

+0

어떤 이유로 엔트리를 편집 할 수 없습니다. rotes가 있습니다. https://gist.github.com/drale2k/a25c4cbffe8c5e6446df2141a393cd17 –

+0

PR에서는 form_with (model : [@post, Comment.new])를 볼 수 있지만 저는 form_with에서 여러 모델을 사용하지 않았습니다. 같은. 또한, Petr은 답을 가지고 있습니다. 다른 문제가 있는지 알려면 알려주세요. 그 오류는 주로'form_with'에 의해 생성되고있는'operation_agent_meterpreter_jobs_path' 경로가 없기 때문에 발생합니다. – Aakanksha

답변

0

이 코드 문제 몇 가지가 있습니다에서 양식 뷰는 지금 앉아 :

  • 경로에서 과 :meterpreter 사이에 여러 불일치가 있습니다. 시스템에 Meterpreter 작업이 두 개 이상있을 경우 둘 다 복수 여야합니다. resources :meterpreters.

  • 컨트롤러는 항상 레일 규칙 (raails conventions)을 따라 여러 이름을 붙여야합니다. Jobs::MeterpretersController. 컨트롤러 파일과 뷰 폴더의 이름도 변경해야합니다.

  • Jobs::MeterpreterMeterpreterJob 사이의 명명 불일치가 있습니다. 나는 거기에 무슨 일이 일어나고 있는지 모르겠다. 나는 그들이 같아야한다고 생각한다.

그러나

주요 문제 : 당신은 /jobs/는 URL의 일부가 될하는 의미 라우팅 네임 스페이스 :jobs을 정의했지만, 당신은 당신의 form_with 태그에 해당 네임 스페이스를 포함하지 않는

  • . 그것은 네임 스페이스를 포함해야합니다. <%= form_with model: [@operation, @agent, :jobs, @job] do |form| %>

/operations/123/agents/345/jobs/meterpreters/567과 같은 URL이 정말로 필요하면 스스로에게 문의하십시오. URL이 너무 길어서 불필요한 정보가 간결하게 표시되어야합니다.

+0

감사합니다. Model과 Controller MeterpreterJobs로 이름을 바꾼 후에도 폼을 변경하지 않고 작동했습니다 –