【发布时间】:2017-09-21 07:04:15
【问题描述】:
我正在接受 ruby-kickstart (Josh Cheek) 挑战,即使我设法通过了所有测试,但有一件事我无法理解。
在练习中,您被要求覆盖实例变量的
在 Ruby on Rails 中,当有人访问您网站上的某个 URL 时,您的 应用程序查看 url,并将其映射到控制器方法以 处理请求
我的老板希望能够指定正文的 CSS 类 HTML 输出应该有,基于哪个控制器方法是 访问。我有责任提供一种方法,当被调用时, 将返回一个可以处理请求的字符串有一些 不过,细微差别。您返回的字符串必须在 对象的整个生命周期中的方法必须能够被多次调用 次你返回的字符串应该知道如何添加新的类:每个 类用空格隔开唯一需要担心的方法 被调用的是
controller = ApplicationController.new
controller.body_class
#=> ""
controller.body_class << 'admin'
controller.body_class
#=> "admin"
controller.body_class << 'category'
controller.body_class
#=> "admin category"
controller.body_class << 'page' << 'order'
controller.body_class
#=> "admin category page order"
我的工作解决方案:
class ApplicationController
def initialize
@body_class = ""
end
def body_class
def @body_class.<<(str)
puts "self is:"+self
return self if self=~/\b#{Regexp.escape(str)}\b/
if self==""
self.concat(str)
else
self.concat(" ")
self.concat(str)
end
end
return @body_class
end
end
一切正常。 但是我给出的一个较早的解决方案(它没有工作)如下
class ApplicationController
attr_accessor :body_class
def initialize
@body_class = ""
end
def @body_class.<<(str)
puts "self is:"+self
return self if self=~/\b#{Regexp.escape(str)}\b/
if self==""
self.concat(str)
else
self.concat(" ")
self.concat(str)
end
end
def body_class #Even this for the way I work it out on my mind is unnecessary
return @body_class
end
end
当有人在第二个不工作的解决方案上运行时
obj = ApplicationController.new
obj.body_class << "Hi"
谁能给我指点一下! 谢谢!
【问题讨论】:
-
另一方面,您可能需要考虑该正则表达式的作用。许多框架使用 css 样式,例如
message、message-important、message-warning,连字符将被视为单词边界,因此如果@body_class是"admin-log",然后您想要附加log或admin不会发生 -
嗨@engineersmnky,感谢您的cmets。此示例来自初学者教程,用于学习 ruby 的基础知识。 rspec 正在检查一些挑战。我不认为该代码旨在用于真正的应用程序:) 可以找到该教程here
标签: ruby-on-rails ruby attributes accessor singleton-methods