2014-07-17 58 views
0

我有一個模型Photo,作爲其業務邏輯的一部分,其中有一個工作流程狀態,用戶可以拒絕或批准其提交。批准或拒絕的行爲最初分爲兩種方法。在Rails中使用控制器內部的模型方法,

例如

def toggle_reject_field 
    @entry.reject! 
    respond_to do |format| 
     format.html { redirect_to request.referer } 
     format.json { head :no_content } 
     format.js 
    end  
    end 

和的link_to路徑

%td= link_to "Reject", (toggle_reject_field_admin_entry_path(photo, params.except(:controller, :action))), :remote => true 

我想使這兩種方法中的一種,這樣的link_to就像

%td= link_to "Approve", toggle_field_admin_entry_path(photo, params.except(:controller, :action)) 

和方法像這樣的東西

 def toggle_field 
     @entry.toggle_state 
     redirect_to pending_admin_entries_path 
     end 

與方法「toggle_state」居住在我的照片模式(懇求注意到,儘管該模型被稱爲照片,照片的情況下,被稱爲「入口」)

def toggle_state 
    self.state = (self.state == 'approve') ? 'reject' : 'approve' 
    end 

這裏是我的路線太

namespace :admin do 
    resources :entries do 
     get :toggle_field, on: :member 
     get :pending, on: :collection 
     get :approved, on: :collection 
     get :rejected, on: :collection 
    end 
    end 

但是我得到這個錯誤,我認爲這意味着方法'toggle_state'根據控制器,不存在嗎?

undefined method `toggle_state' for nil:NilClass 
def toggle_field 
    @entry.toggle_state 
    redirect_to pending_admin_entries_path 
    end 

幫助將大規模讚賞,我覺得好像我一直相處的時間與此一敲我的頭撞在牆上了...

波多黎各

回答

2

@entry變量是nil。我猜你有before_filter的方法找到@entry記錄,但是你在toggle_field行動之前沒有應用它。

+0

@MarkLipka哦,我的,非常感謝你!,儘管我還是遇到了這個錯誤未定義的方法'狀態'爲#<照片:0x007f992428fd10>。我假設在我的模型方法中,我使用三元運算符來定義狀態? –

+1

@rico_mac是否有狀態字段?你運行過所有的遷移嗎? –

+0

男人,我很抱歉,感謝您的幫助,因爲調用的方法應該是'workflow_state'。你救了我幾個小時,謝謝 –

相關問題