怎么做:只能在这个红宝石代码中工作?

时间:2012-05-30 23:00:03

标签: ruby-on-rails ruby

我刚刚开始学习ruby,我对以下代码有疑问。 我想知道“:only =>:show”究竟是如何影响这里的代码的。我假设如果我们没有“:only =>:show”,那么代码将直接处理身份验证。但究竟是什么“:only =>:show”呢?谢谢!

class PeopleController < ApplicationController

  before_filter :authenticate, :only =>:show

  def index
    @people = ["luke-skywalker", "darth-vader"]
  end

  def show
    @person = params[:id]
  end

  private

  def authenticate
    if params[:id] == "darth-vader"
      redirect_to people_url, :notice => "The page is restricted."
      #this is called the flash message
    end
  end
end

4 个答案:

答案 0 :(得分:1)

before_filter方法的hash参数(请参阅filters docs)表明过滤方法只应在“show”方法之前运行。

:only是一个哈希键,:show是一个映射到show控制器方法的符号。

答案 1 :(得分:1)

在filter之前是一个回调,说在调用你调用的实际操作之前调用此方法。 :only =&gt; :show告诉回调只对show动作执行此操作。如果你拿出来,那么在所有行动之前调用该方法

答案 2 :(得分:0)

在ROR中,过滤器是在操作之前评估的函数或过程。 如果您没有另外说明,则在每个操作之前评估过滤器。 您可以传递:only和:除了指定可以过滤或不过滤哪个操作。

答案 3 :(得分:0)

程序将第二个参数中的文字Hash对象传递给方法before_filter

Hash文字是方法的最后一个参数时,Ruby允许删除{}

这在诗歌模式中特别有用,因为{似乎会开始阻止。逗号被解释为继续Hash字面而不是继续参数列表。

试试这个,看看:

def f x
  p x
end
f :a => :b, :c => :d
f({:a => :b, :c => :d})