我有一个模型Photo,作为其业务逻辑的一部分,它具有工作流状态,用户可以拒绝或批准其提交。批准或拒绝的行为最初分为两种方法。
例如
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'驻留在我的Photo模型中(请注意,尽管模型被称为照片,但Photo的实例称为'entry')
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
帮助将受到大力赞赏,我觉得好像我一直在用这个一直撞在墙上......
波多黎各
答案 0 :(得分:2)
您的@entry
变量为nil
。我猜您使用before_filter
方法查找@entry
条记录,但在toggle_field
操作之前您没有应用它。