新手问题 ruby 语法问题-- class 里面方法直接调用?

jziwenchen · 2012年11月27日 · 最后由 sevk 回复于 2012年11月27日 · 2559 次阅读

我在看别人写的例子有这么一段代码:

class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_path, :alert => exception.message
  end

end

问题是:

protect_from_forgery 明显是一个方法 类里面可以直接调用方法?

然后:

rescue_from CanCan::AccessDenied do |exception|
  redirect_to root_path, :alert => exception.message
end

这段代码是什么意思?

求解释。

  1. protect_from_forgery 是一个方法,类里当然能调用方法,静态语言没有这个特征?
  2. rescue_from 是抓取 抛出的错误,这里声明 如果抛出的异常是 CanCan::AccessDenied 类型的 则执行 block 内的方法,block 内呢 则是拿到 exception 实例,让其跳转到 首页 并且带上警告信息(就是异常的信息)

@yakjuly 类里面看的最多的是声明吧?方法调用是不是都在声明的方法里面?

不过谢谢你的回复。

还有问题就是 :alert 是一个符号吧?全局的么?还是其他的意思?

我第一次看 ruby 的代码。手上有本书 不过不知道哪里有讲..

楼上回答的蛮好。ruby 和其他语言不通之处在于,类定义就可以调用方法。

@yakjuly

原来都是 rails 里新的方法:

protect_from_forgery 和 rescue_from 都是的

@yakjuly 但是不理解 :alert 是什么东西

@jziwenchen 建议看下 ruby 元编程 这本书,rails 里面大量用了元编程的思想

建议楼主还是先看看 Ruby 相关的书籍吧,不学的话,怎么能用好 Ruby 呢。:)

@skandhas 我想边看代码边学习 每遇到疑问就去找 这样速度快点 呵呵。

我也是求速性

:alert 是 符号。ruby 的一种基本类型,与字符串类似。在 redirect_to 里加了 :alert 参数,就相当于写了 flash[:alert] = "xxx"。这里是一种简写

初学,就把冒号开头的当成 只读的 string 吧。

irb(main):001:0> a=:a
=> :a
irb(main):002:0> a
=> :a
irb(main):003:0> a.class
=> Symbol
irb(main):004:0> b="a"
=> "a"
irb(main):005:0> b.class
=> String
irb(main):006:0> a==b
=> false
irb(main):007:0> a+:a
NoMethodError: undefined method `+' for :a:Symbol
        from (irb):7
        from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):008:0> b+b
=> "aa"
需要 登录 后方可回复, 如果你还没有账号请 注册新账号