鉴于我有一个类A,它是一种抽象的,并封装了后代B和C所需的逻辑.
class A
end
class B < A
end
class C < A
end
Run Code Online (Sandbox Code Playgroud)
此外,如果具有为B和C提供路由的资源路由,并且因此由相应的控制器处理.
为了解决问题,我将两个控制器的共享代码移动到一个"抽象"控制器(永远不会被实例化,也没有路由到它的动作):
class AController < ApplicationController
def new(additional_opts)
render locals: {base: "stuff"}.merge(additional_opts)
end
end
class BController < AController
def new
super(foo: 1)
end
end
class CController < AController
def new
super(bar: 1)
end
end
Run Code Online (Sandbox Code Playgroud)
控制器动作通常没有参数.但是,由于AController是抽象的,这种方法可能是有效的,或者更好地依赖实例变量并简单地调用super然后从变量中提取所需的信息呢?
欢迎任何见解.
编辑1:
值得庆幸的是,Lateralu42建议让我思考的问题; 好吧,我真正的问题是什么,我想要一个anwser?(就像搭便车的徒步旅行者指南).那么它还要使用哪种代码重用方法呢?
在这里找到一篇不错的博文.
我正在使用带有savon v2的SOAP Web服务,并且在响应中获取了一个需要解析的序列化PHP数组.
是否有红宝石或铁轨宝石提供此功能?
php数组字符串如下所示:
"a:5:{s:4:\"link\";s:88:\"https://www.12345.de/kundenmeinung.php?kunde=a2ca9498f6f7695aa518d6d6ed9fec7b&shop=12345\";s:4:\"hash\";s:32:\"a2ca9498f6f7695aa518d6d6ed9fec7b\";s:11:\"known_since\";s:0:\"\";s:4:\"done\";i:1;s:7:\"done_at\";i:1358413353;}"
Run Code Online (Sandbox Code Playgroud)
问候
卡斯滕
我在玩范围时偶然发现了奇怪的行为,预计:
(1...1).count
# => 0
(1...1).first(1)
# => []
(1...1).last(1)
# => []
(1...1).to_a
# => []
Run Code Online (Sandbox Code Playgroud)
但
(1...1).first
# => 1
(1...1).last
# => 1
Run Code Online (Sandbox Code Playgroud)
我是否会遗漏某些内容或是否是这种行为?
我想知道为什么与三元运算符的赋值反应奇怪:
a = "foo"
=> "foo"
a = nil ? nil : a
=> "foo"
a
=> "foo"
Run Code Online (Sandbox Code Playgroud)
但:
a = nil ? nil : a
=> "foo"
a = "bar" ? "bar" : a
=> "bar"
a
=> "bar"
Run Code Online (Sandbox Code Playgroud)
和:
if a = nil
puts "should be nil"
end
=> nil
Run Code Online (Sandbox Code Playgroud)
不会puts是字符串,因为虽然作业成功,但a = nil会返回nil错误.
这一切都表现得像预期的那样吗?