2

我今天刚开始学习 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

4 回答 4

1

它是该方法的哈希参数before_filter(请参阅过滤器文档),表明过滤器方法应该只在“显示”方法之前运行。

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

于 2012-05-30T23:04:50.363 回答
1

在过滤器之前是一个回调,表示在处理您调用的实际操作之前调用此方法。:only => :show 告诉回调仅对 show 操作执行此操作。如果取出,则在所有操作之前调用该方法

于 2012-05-30T23:05:05.967 回答
0

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

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

这在诗歌模式中特别有用,{否则看起来会开始一个块。逗号被解释为继续Hash文字而不是继续参数列表。

试试这个,看看:

def f x
  p x
end
f :a => :b, :c => :d
f({:a => :b, :c => :d})
于 2012-05-30T23:42:36.117 回答
0

在 ROR 中,过滤器是在操作之前评估的函数或过程。如果您没有另外说明,则过滤器会在每个操作之前进行评估。您可以通过 :only 和 :except 指定哪些操作可能会或可能不会被过滤。

于 2012-05-30T23:05:35.760 回答