rails with_options条件问题

时间:2015-10-30 07:52:42

标签: ruby-on-rails-4 callback

我有2个回调调用相同的方法,我想以相同的条件控制它们。在示例代码下面。

with_options if: :survey_enabled? do
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
end

private

def survey_enabled?
 Rails.configuration.survey_enabled
end

def some_method
 #my code
end

survey_disabled?正在返回false am undefined method after_save' for false:FalseClass

我尝试在一个块中调用该方法(因为没有块,一旦类初始化,如果没有错误就会调用方法),如

with_options if: -> { survey_enabled? } do
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
end

但仍然遇到同样的问题。我可以知道这里有什么问题吗?

1 个答案:

答案 0 :(得分:0)

with_options的用法是,如果您想在同一个对象上调用一系列操作,可以使用with_options调用它。

例如:(来自railicasts

with_options :if => :should_validate_password? do |user|
  user.validates_presence_of :password
  user.validates_confirmation_of :password
  user.validates_format_of :password, :with => /^[^\s]+$/
end 

所以在这里你缺少必须执行操作的对象,在上面的例子中是用户

with_options if: :survey_enabled? do
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
  after_save: #some_method, unless: Proc.new { |role| role.role_name == "Manager" }
end

同样的事情是这条消息说undefined method after_save' for false:FalseClass。 Block试图在false上调用after_save操作,这是FalseClass的对象

希望它会有所帮助