没有路线匹配[PATCH]

时间:2015-11-03 22:52:45

标签: ruby-on-rails forms ruby-on-rails-4 routing

我尝试提交表单但遇到了错误

  

没有路线匹配[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])
        @company=@security.company
    end

    def update
        @stockholder=Stockholder.find(params[:id])
        @security=Security.find(params[:security_id])
        @company=@security.company
        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

有谁能帮我理解这里发生了什么?我用这种方式构建了两个模型,并没有遇到问题。

非常感谢提前

1 个答案:

答案 0 :(得分: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

或者你可以更优雅地做到这一点:

invalid_chars = r"\~!#$%^&*()_+{}:;"
for char in email:
    if char in invalid_chars:
        # fail the test
        pass