2010-08-22 63 views
0

我想遵守規則並保持RESTful,但我遇到了一些問題。爲什麼我的控制器/操作未響應:put?

設置我的路線,所以我敢肯定這是調用正確的行動,當我運行耙路線此出現:

PUT /admin/settings {:controller=>"admin", :action=>"save_settings"} 

所以我知道我的路線是正確的,在我*意見/admin/settings.html.erb」我有以下幾點:

<% form_for(:settings, :html => { :method => :put },:builder => MyFormBuilder) do |f| %> 

,一切似乎正確渲染(因爲跳舞的軌道圍繞一個PUT):

<form action="/admin/settings" method="post"> 
<input name="_method" type="hidden" value="put" /> 

但是當我實際點擊提交按鈕時,什麼也沒有發生。爲了測試,我只是做了閃光燈

# PUT admin/settings 
def save_settings 
    flash[:notice] = 'Settings Saved' 
    render :action => 'settings' 
end 

並沒有什麼閃光。我想我在這裏覆蓋了我的基地,但我必須忘記一些事情。請幫助RoR noob :)

+0

需要添加「:。網址=> {:action =>'save_settings'}'儘管我的路由很好 – naspinski 2010-08-22 15:58:20

回答

1

您要麼執行Steve的說法,要麼堅持在表單構建器中提到請求類型,那麼您應該使用正確的語法。

試試這個

`<% form_for :post, @post, :url => post_path(@post), :html => { :method => :put, :class => "edit_post", :id => "edit_post_45" } do |f| %>` 

這是從Rails的資料爲準。第一個參數是對象的名稱(在大多數情況下,您的case/model類名稱中的設置),第二個參數用於存儲表單數據的實例變量(您在「編輯」操作中使用的變量的名稱,url您可以使用網址助手,或者你可以手動指定控制器和動作,而你的「放」動詞將進入HTML選項哈希

關注這個,看看它是否是工作

2

您需要在設置閃存後再次渲染設置頁面,否則頁面將不會重新繪製,因爲您尚未向瀏覽器提供任何新內容。

「標準」平安控制器更新動作看起來像這樣

def update 
    @device = Device.find(params[:id]) 
    if @device.update_attributes(params[:device]) 
     flash[:notice] = "Successfully updated device." 
     redirect_to @device 
    else 
     render :action => 'edit' 
    end 
    end 

所以您應該添加一個渲染你的save_settings方法或重定向到它自身。

+0

我在那裏有一個渲染,我只是把它拿出來(上面編輯) - 我仍然只是得到一個回傳頁面,沒有其他的? – naspinski 2010-08-22 15:11:56

相關問題