1

views/products/edit.html.erbが使用する:

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

これは以下を生成します:

<form method="post" action="/aircons/8" accept-charset="UTF-8">

次のエラーが表示されます。

The action '8' could not be found for ProductsController

で製品を更新しようとしたとき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

routes.rb次の 2 行のみが含まれます。

root :to => "products#index"
resources :products
4

2 に答える 2

6

なぜあなただ​​けを使用しないのですか:

<%= form_for @product do |f| %>

?

うまくいかない場合は、ルートを質問に追加してください。

于 2010-12-14T12:55:35.290 に答える
1

これを使ってみてください

<% form_for @product %>
#code goes here
<% end %>

しようとしているすべてのことを行う必要はありません。足場メカニズムを使用してこのProductモデルを作成した場合は、ファイルにそのエントリが必要config/routes.rbです。これにより、以下のようなパス変数が得られます

GET     /products/:id/edit      edit    return an HTML form for editing a photo
PUT     /products/:id   update  update a specific photo

edit_product_pathこれに関する詳細については、編集パスを取得できます。これを見てください。

理解を深めていただければ幸いです。

于 2010-12-14T12:50:58.080 に答える