轨道上红宝石的%w的目的

时间:2016-04-19 08:04:25

标签: ruby-on-rails ruby

我在routes.rb中看到这样的

%w( about mission path standard getting_started welcome infection instruction implementation ).each do |page|
    get page, to: "pages##{page}"
end

当我看到home控制器时,它没有上面列出的任何动作。但链接正常。

我想知道这些代码行是做什么的?

5 个答案:

答案 0 :(得分:4)

%w( about mission path standard getting_started welcome infection instruction implementation ).each do |page|
    get page, to: "pages##{page}"
end

代码的作用类似于:%w(foo bar)是数组["foo", "bar"]

的快捷方式
.each do |page| 

它循环每个元素,例如在第一个循环中,page =“foo”

的值
get page, to: "pages##{page}"

这一行将成为

get foo, to: "pages#foo"

当用户点击/ foo时,你将被重定向到页面控制器的foo动作,这对其他元素也是如此。

因此,这样可以轻松定义%w()

中所有元素的路径

答案 1 :(得分:2)

如果它工作正常,那么也许你应该寻找Method invocation 'customToastButton.setOnClickListener(new View.OnClickListener() {              public void onClick(Vi...' may produce 'java.lang.NullPointerException' less... (Ctrl+F1) This inspection analyzes method control and data flow to report possible conditions that are always true or false, expressions whose value is statically proven to be constant, and situations that can lead to nullability contract violations. Variables, method parameters and return values marked as @Nullable or @NotNull are treated as nullable (or not-null, respectively) and used during the analysis to check nullability contracts, e.g. report possible NullPointerException errors. More complex contracts can be defined using @Contract annotation, for example: @Contract("_, null -> null") — method returns null if its second argument is null @Contract("_, null -> null; _, !null -> !null") — method returns null if its second argument is null and not-null otherwise @Contract("true -> fail") — a typical assertFalse method which throws an exception if true is passed to it The inspection can be configured to use custom @Nullable @NotNull annotations (by default the ones from annotations.jar will be used) 控制器,而不是var spaceperson = { speed: 256, other_stuff: '' }, keysDown = [], update, main; addEventListener("keydown", function (e) { keysDown[e.keyCode] = true; }, false); update = function (modifier) { if (38 in keysDown && spaceperson.y > 0) { // UP spaceperson.y -= spaceperson.speed * modifier; } if (40 in keysDown && spaceperson.y < CANVAS_HEIGHT - SPACEPERSON_HEIGHT) { // DOWN spaceperson.y += spaceperson.speed * modifier; } if (37 in keysDown && spaceperson.x > 0) { // LEFT spaceperson.x -= spaceperson.speed * modifier; } if (39 in keysDown && spaceperson.x < CANVAS_WIDTH - SPACEPERSON_WIDTH) { // RIGHT spaceperson.x += spaceperson.speed * modifier; } } 控制器。

部分:

SetSelection

%w( - 仅适用于字符串数组,只是另一种写法:

((Spinner)convertView).SetSelection(0) //This will set the first item as selected.

它更方便,因为您不必担心逗号和其他,只需按空格分隔数组。

如果你迭代(.each)这个和在块中你做page 它适用于每个项目:

home

等等。在这种情况下,控制器是“页面”,动作是“约”等。

以下是关于%w:http://ruby-doc.org/core-2.2.3/doc/syntax/literals_rdoc.html#label-Percent+Strings

的更多信息

关于路由:http://guides.rubyonrails.org/routing.html#singular-resources

答案 2 :(得分:1)

%w是一个ruby处理器,它在空白处分割输入的字符串并输出一个数组。

然后它应用

var pattern = new RegExp(/^(?=.*\d)(?=.*[a-zA-Z]).{2,}$/);
alert(pattern.test(value) + value);

到数组中的特定条目。

您没有看到PagesController中定义的操作的原因是控制器操作可能是空的,因为它们可能是半静态页面。

在这种情况下,Ruby on Rails应用程序只需要正确的视图就绪,并且不需要定义特定的操作。

答案 3 :(得分:0)

%w( about mission path standard getting_started welcome infection instruction implementation ).each do |page|
    get page, to: "pages##{page}"
end

上面的代码定义了属于页面控制器而不是家庭控制器的动作。

希望信息可以帮助您弄清楚事情。

答案 4 :(得分:0)

根据我的理解,实际问题是在home controller中未定义任何操作时如何工作。

您所描述的路线只定义了可以针对home controller运行的许多不同操作,例如aboutmission等。

为了显示这些页面,您只需要app/views/pages/about.html.erb中的相关视图即可显示。

无需在控制器中定义操作,例如def about以显示视图。你需要定义它们 ONLY 如果你想设置一些变量来在@my_name这样的视图中显示,但根据定义你不需要有控制器动作为了显示它们