我正在尝试基本上更新我的集成对象属性“过滤器”。我有一个集成控制器,这似乎是正确的行动。但是当我在填写文本字段后尝试保存时,我收到此错误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
希望这是足够的信息让我知道你是否需要更多?我的基本问题是为什么不更新集成对象?是不是更新帖子?
答案 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
资源。如果不是,那么你遇到的问题不仅仅是这个问题。