在Rails中使用控制器内部的模型方法,

时间:2014-07-17 09:23:02

标签: ruby-on-rails ruby

我有一个模型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

帮助将受到大力赞赏,我觉得好像我一直在用这个一直撞在墙上......

波多黎各

1 个答案:

答案 0 :(得分:2)

您的@entry变量为nil。我猜您使用before_filter方法查找@entry条记录,但在toggle_field操作之前您没有应用它。