Ruby on Rails:为什么"编辑"动作不起作用?

Mis*_*hko 1 ruby-on-rails form-for ruby-on-rails-3

views/products/edit.html.erb我使用:

<%= form_for(:product, :url => {:action => 'update', :id => @product.id}) do |f| %>
Run Code Online (Sandbox Code Playgroud)

产生:

<form method="post" action="/aircons/8" accept-charset="UTF-8">
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

The action '8' could not be found for ProductsController
Run Code Online (Sandbox Code Playgroud)

尝试更新产品时id=8.

我认为表格的方法应该是put.是对的吗 ?我该怎么解决这个问题?


一些控制器代码:

def edit
  @product = Product.find(params[:id])
end

def update
  update_params_with_new_values(params)

  @product = Product.find(params[:id])

  if @product.update_attributes(params[:product])
    flash[:notice] = "Product updated successfully."
    redirect_to(:product => 'index')
  else
    render('edit')
  end
end

def update_params_with_new_values(params)
  params[:product][:shop_id] = Shop.create(:name => params[:new_shop]).id if params[:product][:shop_id] == "new_shop"
  params[:product][:brand_id] = Brand.create(:name => params[:new_brand]).id if params[:product][:brand_id] == "new_brand"
end
Run Code Online (Sandbox Code Playgroud)

routes.rb 仅包含以下两行:

root :to => "products#index"
resources :products
Run Code Online (Sandbox Code Playgroud)

kle*_*lew 6

你为什么不用它:

<%= form_for @product do |f| %>
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,请添加您的路线以提问.

  • 我记得,浏览器/服务器只支持POST和GET方法.DELETE和PUT使用POST完成.所以当你创建一个表单时,在HTML中它只使用POST,但是在表单中添加一个隐藏字段`<input name ="_ method"type ="hidden"value ="put"/>`Rails通过哪个方法来区分哪个方法你用 (3认同)