2012-06-08 29 views
1

我使用Rails 3,並且我在StatusController中有一個form_for。當我點擊提交按鈕時,我的創建方法從不被調用。我的創建方法有一個redirect_to:索引,但是當我點擊提交時,所有的信息都保留在表單中,並且頁面不重定向。但是,該對象確實在數據庫中保存。rails form_for永遠不會調用create controller動作來使用redirect_to

這會導致什麼?

控制器:

class StatusController < ApplicationController 
    def new 
    @status = Status.new 
    end 
    def create 
    @status = Status.new(params[:status]) 
    @status.date_added = Time.now 
    if @status.save 
    else 
     render 'new' 
    end 
    end 

查看:

.well 
    =form_for @status do |f| 
    =f.label :user_email 
    =f.text_field :user_email 

    =f.label :added_by 
    =f.text_field :added_by 

    =f.label :comments 
    =f.text_area :comments 
    %br 
    %br 
    =f.submit 

我調整了代碼來此,現在將數據從形式在一個提交消失,但該對象永遠不會被保存,因爲「創建」永遠不會被調用。

+2

向我們展示一些代碼人! –

+0

@Goober你應該發佈你的新的代碼,並從狀態控制器創建動作,以及你的'新'視圖中的form_for代碼。 – cdesrosiers

+0

實際上,您的創建方法沒有redirect_to:index – dogenpunk

回答

0

我剛剛在這裏學習Ruby,所以我可能是錯的,但它看起來像你永遠不會重定向,如果狀態保存正確。

class StatusController < ApplicationController 
    def new 
    @status = Status.new 
    end 
    def create 
    @status = Status.new(params[:status]) 
    @status.date_added = Time.now 
    if @status.save 
     format.html { redirect_to @status } # Or :index if you want to redirect to index 
    else 
     render 'new' 
    end 
    end 

當然,請確保您已經創建了這些控制器方法和視圖。

+0

您錯過了'respond_to' block ...我的眼睛爲main:Object' :-)拋出了一個'NoMethodError:undefined method'格式 –

0

你的控制器看起來有點奇怪......我假設你有Rails 3.2或更新的版本。

class StatusController < ApplicationController 
    respond_to :html 

    def new 
    @status = Status.new 
    end 
    def create 
    @status = Status.new(params[:status]) 

    @status.date_added = Time.now 
    @status.save 
    respond_with(@status) 
    end 
end 

respond_with是爲你做所有事情。如果保存失敗,它會執行new操作,如果保存成功,則重定向到status_path(@status)。如果要更改重定向行爲,則可以使用(否則未記錄的):location屬性來澄清要重定向用戶的位置,或者可以通過傳遞具有一個參數(格式)的塊來覆蓋默認的「成功」行爲。有關更多信息,請參閱its documentation

順便說一句,如果你在狀態的遷移使用t.timestamp S,那麼你已經有了created_at場,它是由save/update_attributes方法自動處理的,所以你不需要date_added

相關問題