我刚刚开始学习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
答案 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})