自定义控制器操作无效

时间:2014-05-23 11:02:29

标签: ruby-on-rails ruby

希望有人可以在这里指出我的方式错误。我有一个带有标准提交按钮的自定义操作的表单:

= 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

2 个答案:

答案 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