我有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
但仍然遇到同样的问题。我可以知道这里有什么问题吗?
答案 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的对象