新手问题 关于 Rails 的冒号

lmm19891114 · 2015年01月31日 · 最后由 rxkotlin 回复于 2021年07月25日 · 2278 次阅读
class Product < ActiveRecord::Base

  validates :image_url, :format => {
   :with => %r{\. (gif|jpg|png)$}i,
   :message => 'must be a URL for GIF, JPG or PNG image '
  }

end

上面是 rails 里的一个验证,那个冒号具体是表示什么意思?字符串文本值?或者看做常量?

因项目需要,开始学习 rails,新手,今后可能会问一些很小白的问题,还望高手们不要见笑

匿名 #2 2015年01月31日

你的这个问题涉及到 ruby 得两个基本数据类型:symbol 和 hash。 google 一下,就安啦。 😄

ruby china 社区对待小白态度真的太好了 :plus1:

刚上手 rails 的小白,碰到两种冒号用法:

  1. 前置冒号 :xxxx
  2. 后置冒号 xxxx:

我的理解第一种相当于普通字符串的简单定义,:xxxx 可以看作其它语言里的 "xxxx"
第二种 xxxx:,是 ruby 为了方便定义 map (ruby 称为 hash ) 中 key 的写法。

以 rails 的 before_action 函数为例:

# before_action 的完整调用
before_action("authenticate_user_token", {"only" => "logout"})

# 简化字符串
before_action(:authenticate_user_token, {:only => :logout})

# 简化 key
before_action(:authenticate_user_token, {only: :logout})

# 省略括号
before_action :authenticate_user_token, {only: :logout}

# 当散列是方法调用的最后一个参数时,可以省略花括号
before_action :authenticate_user_token, only: :logout
需要 登录 后方可回复, 如果你还没有账号请 注册新账号