【问题标题】:Using model method inside controller in Rails,在 Rails 的控制器中使用模型方法,
【发布时间】:2014-07-17 09:23:02
【问题描述】:

我有一个模型 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”方法(请注意,尽管模型被称为照片,但照片的实例被称为“条目”)

  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

非常感谢您的帮助,我觉得好像我一直在用这个头撞墙......

里科

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

    【讨论】:

    • @MarkLipka 哦,天哪,非常感谢!虽然我仍然遇到这个错误 undefined method `state' for #<0x007f992428fd10>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多