将 'before_action' 的 return 值传递给即将进行的操作

Pass return value of 'before_action' to coming actions

这是我的 MpdController:

class MpdController < ApplicationController
  require 'ruby-mpd'

  def status
    mpd = MPD.new
    mpd.connect
    # ... 
    mpd.disconnect
  end

  def help
    mpd = MPD.new
    mpd.connect
    # ... 
    mpd.disconnect
  end

  def pause
    mpd = MPD.new
    mpd.connect
    # ... 
    mpd.disconnect
  end
end

如您所见,每个方法都需要一个新的 MPD 实例并将其保存到我的变量中。 现在,是否可以通过 before_action 和 after_action,由 Rails 提供?

我想到了类似的东西:

before_action :new_mpd
after_action :disconnect_mpd

def new_mpd
    mpd = MPD.new
    mpd.connect
    mpd
end

def disconnect_mpd(mpd)
    mpd.disconnect
end

它需要从我的前过滤器中获取 return 值,然后将其进一步传递到我的后过滤器。

这有用吗? 感谢您的帮助。

这是通过分配给控制器实例变量来完成的。

before_action :new_mpd

def status
  # use @mpd
end

private

def new_mpd
  @mpd = MPD.new
  @mpd.connect
end