2015-11-03 5 views
0

Я пытаюсь отправить форму, но я бегу в ошибкуНет маршрута матчей [PATCH]

Нет маршрута матчей [PATCH]

Я видел множество постов на эта ошибка, но в каждом из них они устанавливают только get в своих маршрутах или некоторую такую ​​ошибку. У меня также не было проблем с отправкой других форм с почти одинаковой структурой маршрутизации и формы.

Так первый, Security has_many :stockholders

Моя форма выглядит следующим образом (место нахождения: views/stockholders/edit.html.erb):

<%= simple_form_for @stockholder, url: url_for{action:'update', controller:"stockholders"}, html: {id:"stockholderform"}, update: { success: "response", failure: "error"} do |f| %> 
    <div class="container"> 
     <div class="symegrid"> 
      <div class="form-inline"> 
       <%= f.grouped_collection_select :entity_id, [Org, Person], :all, :model_name, :to_global_id, lambda {|org_or_person_object| org_or_person_object.instance_of? Org? rescue org_or_person_object.fname + " " + org_or_person_object.lname rescue org_or_person_object.name}, label:"Stockholder", class: "names"%> 
      </div> 
      <div class="form-inline"> 
       <%= f.input :cert_number, label:"Certificate Number" %> 
       <%= f.input :issue_date, Label: "Issue Date" %> 
      </div> 
     </div> 
     <div class="submit_button"> 
     <%= f.submit %> 
     </div> 
    </div> 
<% end %> 

И мой контроллер:

class StockholdersController < ApplicationController 
    def edit 
     @stockholder=Stockholder.find(params[:id]) 
     @security=Security.find(params[:security_id]) 
     @[email protected] 
    end 

    def update 
     @stockholder=Stockholder.find(params[:id]) 
     @security=Security.find(params[:security_id]) 
     @[email protected] 
     if @stockholder.update(stockholder_params) 
      redirect_to edit_security_path(@security) 
     else 
      redirect_to edit_security_stockholder_path 
     end 
    end 

    private 

     def stockholder_params 
      params.require(:stockholder).perimit(:id, :entity_id, :cert_number, :issue_date, :shares_issued, :shares_repurchased, :shares_canceled, :shares_outstanding) 
     end 
end 

Наконец, мои маршруты:

resources :securities do 
    resources :stockholders 
end 

Может ли кто-нибудь помочь мне понять, что здесь происходит? Я структурировал две модели именно таким образом и не столкнулся с проблемой.

Большое спасибо заранее

ответ

2

Ваш маршрут ожидает еще два параметра, которые :security_id и :id.

simple_form_for @stockholder, url: { action: 'update', controller: "stockholders", security_id: @security.id, id: @stockholder.id }, ... 

, где @security может быть @stockholder.security, если не экземпляр в контроллере.

Или вы можете сделать это более элегантно:

simple_form_for [@security, @stockholder], ... # url parameter is not needed 
+0

Спасибо за ответ. К сожалению, я все еще получаю ту же ошибку. – neanderslob

+0

Получил это, просто пришлось удалить элемент 'url: {action: 'update', controller:" sharesholders}} 'и добавить' @ security' так же, как вы сказали. – neanderslob

Смежные вопросы