我正在观看关于多态关联的RailsCast。 http://railscasts.com/episodes/154-polymorphic-association?view=asciicast
有三种不同的模型文章,照片和事件,每个都从Comment.rb发表评论。 (article_id,photo_id和event_id各自的文章,照片和事件)。在列出评论时,他有问题找出列出评论的3个模型中的哪一个,所以他在索引动作中这样做
def index
@commentable = find_commentable
@comments = @commentable.comments
end
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
我的问题是,$1
是什么?
答案 0 :(得分:22)
$ 1是一个全局变量,可以在以后的代码中使用:
if "foobar" =~ /foo(.*)/ then puts "The matching word was #{$1}" end
<强>输出强>:
“匹配的单词是bar”
简而言之,$ 1,$ 2,$ ...是一些特殊关于REGEX
的ruby库函数使用的全局变量,让程序员在后面的代码中使用这些结果。
See this了解Ruby中可用的更多变量。
答案 1 :(得分:14)
$1
与/(.+)_id$/
上方的正则表达式匹配。 $1
变量是括号中匹配的字符串。