在情节389 of Railscasts,他创建了一个名为SCOPE_SCHEMA方法,既被整个事件中使用的方法,但与do
红宝石方法块
块可以在任何方法来完成这样也传递? (*paths)
代表什么?我该如何创建一个可以成为块的方法?我看了看link_to
源代码,并在可能安排发送给最终&block
注意到你可以做
<%= link_to ....%>
或
<%= link_to ... do %>
<%end%>
还是我不正确的?
集代码:
after_create :create_schema
def create_schema
connection.execute("create schema tenant#{id}")
scope_schema do
load Rails.root.join("db/schema.rb")
connection.execute("drop table #{self.class.table_name}")
end
end
def scope_schema(*paths)
original_search_path = connection.schema_search_path
connection.schema_search_path = ["tenant#{id}", *paths].join(",")
yield
ensure
connection.schema_search_path = original_search_path
end
那么为什么在'scope_schema'的情况下没有'&block'还没有和'do'一起使用或者是由于splat操作符? –
'scope_schema'方法中的'yield'产生了一个块 - 我很抱歉,我不明白这是问题的一部分。 [这个答案](http://stackoverflow.com/a/3066939/2128691)很好地涵盖了“yield”。 – dax