更新属性rails - 没有路由匹配[POST]

时间:2016-09-04 13:40:50

标签: ruby-on-rails

我正在尝试基本上更新我的集成对象属性“过滤器”。我有一个集成控制器,这似乎是正确的行动。但是当我在填写文本字段后尝试保存时,我收到此错误No route matches [POST],我理解它的内容但是不更新帖子?为清晰起见,这是我的代码。

控制器

    def update
    @integrations = current_account.integrations.find(params[:id])

    attrs = params.require(:integration).permit(:filters)

    if @integrations.update_attributes(attrs)
      redirect_to account_integration_path
    else
      render :filters
    end
  end

  def filters
    @integrations = current_account.integrations.find(params[:id])
  end

视图

    <%= form_for @integrations, url: filters_account_integration_path do |f| %>
    <%= f.text_field :filters, class: "tag-autocomplete" %>
    <%= link_to "Save", account_integration_path, method: :post, class: [ "button", "button--modal" ] %>
    <% end %>

路线

   resources :integrations, only: [ :index, :destroy, :update ] do
    get "filters", on: :member
   end

希望这是足够的信息让我知道你是否需要更多?我的基本问题是为什么不更新集成对象?是不是更新帖子?

1 个答案:

答案 0 :(得分:1)

resources默认生成七条路线。你用它只生成其中的三个。这三条路线将如下所示:

  • GET /integrations
  • DELETE /integrations/:id
  • PATCH /integrations/:id/edit

另一方面,你的表格试图使用这条路线:

  • POST /integrations/:id

与任何生成的路线都不匹配。

相反,请尝试使用默认的表单助手:

<%= form_for @integrations, url: url_for(:controller => :integrations, :action => :update, :id => @integrations.id) do |f| %>
  <%= f.text_field :filters, class: "tag-autocomplete" %>
  <%= f.submit "Save" %>
<% end %>

假设@integrations是单个Integration资源。如果不是,那么你遇到的问题不仅仅是这个问题。