希望有人可以在这里指出我的方式错误。我有一个带有标准提交按钮的自定义操作的表单:
= form_for( @property, :html => {:data => {:abide => ''}, :id => 'property-edit-form'},:url => url_for(:action => 'update_promo')) do |f|
路线如下:
post 'properties/update_promo', :as => 'update_promo'
控制器操作是:
def update_promo
@property = Property.find(params[:id])
if @property.update(property_params)
respond_to do |format|
format.html
format.js
end
else
render 'edit'
end
end
问题是它仍在调用默认的Update操作。我收到错误:
Couldn't find Property with 'id'=update_promo
有人可以帮忙吗?
完整路线......
get 'users/index'
get 'home/index'
get 'properties/update_regions', :as => 'update_regions'
get 'properties/update_places', :as => 'update_places'
get 'properties/update_map', :as => 'update_map'
get 'properties/update_promo', :as => 'update_promo'
root 'home#index'
post "versions/:id/revert" => "versions#revert", :as => "revert_version"
resources :properties
resources :users do
collection do
get :properties # add this line
end
end
答案 0 :(得分:3)
更新您的routes.rb文件行:
get 'properties/update_promo', :as => 'update_promo'
到此:
post 'properties/update_promo', :as => 'update_promo'
此外,您可以将表单更改为:
= form_for( @property, :html => {:data => {:abide => ''}, :id => 'property-edit-form'},:url => update_promo_path)) do |f|
您可以使用网址助手而不是url_for(:action => ...)
。
答案 1 :(得分:1)
您可能正在GET方法提交提交,因此使用id update_promo调用show方法,尝试添加
:method => :post
到form_for。
要检查,请在提交时查看日志, 如果您的日志以
开头Started GET
而不是
Started POST
您需要将所述参数添加到form_for