[英]Rails is generating wrong path on nested resources with Polymorphic_url and STI
[英]Wrong path for nested controller in Rails
當我嘗試在網址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| %>
我還會問自己,您是否真的需要/operations/123/agents/345/jobs/meterpreters/567
類的URL。 這是一個非常長的URL,可能帶有一些不必要的信息,為簡潔起見,應將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.