Rails 控制器中的 5 个实例级助手方法无法识别助手。方法
Rails 5 instance level helpers method in controller not recognizing helpers. method
我正在尝试遵循 here, originally PR here 提到的 "New way to call helper methods in Rails 5"。
我可以让 "old approach" 与以下内容一起使用:
# app/models/order.rb
class Customer < ActiveRecord::Base
include CustomersHelper
# some code...
def name_make_uppercase
self.first_name = uppercase(first_name)
self.last_name = uppercase(last_name)
end
end
# app/helperss/customers_helper.rb
module CustomersHelper
def uppercase(input)
return unless input
input[0] = input[0].to_s.capitalize
input
end
end
但是,通过新方法,我相信我应该能够删除 "include CustomersHelper" 并将 "helpers." 添加到控制器中的大写函数中,例如
# app/models/order.rb
class Customer < ActiveRecord::Base
# include CustomersHelper
# some code...
def name_make_uppercase
self.first_name = helpers.uppercase(first_name)
self.last_name = helpers.uppercase(last_name)
end
end
但是,现在我的规格出现以下错误:
NameError: undefined local variable or method `helpers' for #Customer:0x00000004d50be8>
我很好奇我可能做错了什么。
helpers
方法仅在 控制器 中可用,您正试图在 模型 中使用它。模特不会(也不应该)知道他们的 views/controllers/helpers。
看起来你需要的是一个常规模块(即不是 Rails 助手)或者一个装饰器(例如 draper)无论如何 helpers
方法赢了在这里帮助你。
建议将您的辅助方法限制在视图模板中,不要将视图辅助方法混入 rails 模型 classes。
您也可以简单地将 capitalize
(ruby String
class 的标准库方法)用于模型实例方法中的实例属性。
# app/models/order.rb
class Customer < ActiveRecord::Base
def name_make_uppercase
self.first_name = first_name.capitalize
self.last_name = last_name.capitalize
end
end
并使用它:
c = Customer.new(first_name: 'bruce', last_name: 'wayne')
c.name_make_upcase
c.first_name #=> 'Bruce'
c.last_name #=> 'Wayne'
我正在尝试遵循 here, originally PR here 提到的 "New way to call helper methods in Rails 5"。
我可以让 "old approach" 与以下内容一起使用:
# app/models/order.rb
class Customer < ActiveRecord::Base
include CustomersHelper
# some code...
def name_make_uppercase
self.first_name = uppercase(first_name)
self.last_name = uppercase(last_name)
end
end
# app/helperss/customers_helper.rb
module CustomersHelper
def uppercase(input)
return unless input
input[0] = input[0].to_s.capitalize
input
end
end
但是,通过新方法,我相信我应该能够删除 "include CustomersHelper" 并将 "helpers." 添加到控制器中的大写函数中,例如
# app/models/order.rb
class Customer < ActiveRecord::Base
# include CustomersHelper
# some code...
def name_make_uppercase
self.first_name = helpers.uppercase(first_name)
self.last_name = helpers.uppercase(last_name)
end
end
但是,现在我的规格出现以下错误:
NameError: undefined local variable or method `helpers' for #Customer:0x00000004d50be8>
我很好奇我可能做错了什么。
helpers
方法仅在 控制器 中可用,您正试图在 模型 中使用它。模特不会(也不应该)知道他们的 views/controllers/helpers。
看起来你需要的是一个常规模块(即不是 Rails 助手)或者一个装饰器(例如 draper)无论如何 helpers
方法赢了在这里帮助你。
建议将您的辅助方法限制在视图模板中,不要将视图辅助方法混入 rails 模型 classes。
您也可以简单地将 capitalize
(ruby String
class 的标准库方法)用于模型实例方法中的实例属性。
# app/models/order.rb
class Customer < ActiveRecord::Base
def name_make_uppercase
self.first_name = first_name.capitalize
self.last_name = last_name.capitalize
end
end
并使用它:
c = Customer.new(first_name: 'bruce', last_name: 'wayne')
c.name_make_upcase
c.first_name #=> 'Bruce'
c.last_name #=> 'Wayne'