Rails 请教一个关于 Agile Web Development with Rails 的问题

nightire · 2012年03月24日 · 最后由 cisolarix 回复于 2012年09月09日 · 2728 次阅读

新手,正在过一遍 AWDwR 一书。

在练习第一个 Hello Goodbye 示例的时候遇到的一个问题,在快结束时,有一个部分叫做 Playtime,里面有一个返回当前目录文件列表的方法,写为:

@files = Dir.glob('*')



之后在模板里遍历显示,写为:

<% for file in @files %>
    file name is: <%= file %>
<% end %>



我照着试了一下,但是没有任何输出,也没有出错,请问何解?

你使用的 rails 版本是什么,是不是 route 没有配置好?

奇怪的是为嘛会用 for 遍历而不是 each

我是按照这本书的配置一步一步做下来的,ruby / rails 等的版本都和书中保持一致,并且其他的范例目前都很正常,没有出过任何问题。

我是新手,还没有学到 route 的部分,所以我很难说是否配置的正确。不过我想,按照书里做的,没道理错吧?(书都第四版了,要是有问题早都应该被指出了才对)

#2 楼 @xguox 嗯,是这样的,我是按照原书中的写法来尝试的,所以我才觉得奇怪。而且原书中并没有给出运行结果,所以我也摸不到头脑。

呃,我也翻了下书,的确有这个例子。真奇怪会用 for 不是 each。不过我随手在随意一个小项目上照着写,但是我能得到输出。你确定你写的 controller、action 和 view 对应正确了?然后 url 输入也是对应上了?

我检查一下再吧,新手,不是很敢确定。。。

写了这么久 ruby 貌似还没用过 for —_—

不要使用 for 用 each

不知道 for 为什么还没有被 remove 掉。。。

#9 楼 @ywencn 虽然我也不用,但还是问一下, for 有什么缺点吗?

试试检查 Dir.glob('*') 是否有内容

@length = @files.length

<%= @length %>

或者

<% if @files.empty? %>
    files is empty
<% end %>

#10 楼 @fenprace ruby for loop 中的 variables 没有 scope, 不像 iterators (times, each, upto...)

如果我没记错的话

for i in [1,2,3,4]
  # do nothing
end
put i   # 4




相比之下 如果使用 iterator

[1,2,3,4].each do |i|
  # do nothing
end

put i  # error, i is undefined




而且我好像记得 ruby 中的 for loop 好像都会被 translate 成.each

<% raise @files.to_yaml %>

看看@files什么东西

#3 楼 @nightire ,@files = Dir.glob("*"),测试过了。木有问题啊。可以考虑设置一下绝对路径。 如 Dir.glob("#{Rais.root}/app/views"); 具体参见:http://ruby-doc.org/core-1.9.3/Dir.html#method-c-glob

依稀记得我捣鼓这个代码的时候,好像能显示目录的说。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号