很奇怪的事情

很奇怪的事情

1.
生成一个php?name=rails" onclick="tagshow(event)" class="t_tag">rails应用 php?name=rails" onclick="tagshow(event)" class="t_tag">rails first
2.
cd first
3.
ruby script/generate controller hello 创建一个控制器
4.
在控制器hello_controller.rb里面添加一个方法:
def display
@time=Time.now
end

5.
在视图views/hello/里新建一个input.rhtml,添加代码:
<html>
<body>
<form action="\hello\display" method=post>
<input type=submit>
</form>
</body>
</html>

6.
在视图views/hello/里新建一个display.rhtml,添加代码:
<html>
<head><title>vivid</title></head>
<body>
<h1>HI!</h1>
<h5><%= @time%></h5>
</body>
</html>

7.
打开WEBrick,http://localhost:3000/hello/input,可以显示提交按钮,但是点击之后,跳到display这个页面,但是只能显示HI!,不能显示系统时间,这是为什么呢?
更奇怪的是,如果我把控制器里的display方法名换成aa(或其他),然后将input.rhtml里的form action改成\hello\aa,然后再将display.rhtml命名为aa.rhtml,HI!和系统时间都可以正常显示了。。。。
我想是不是因为display是ruby的关键字呢?希望高手帮我解答一下。。。。thank you~
这个跟关键字没有关系。你用的rails版本是什么?目前的rails,已经用xxx.html.erb代替了xxx.rhtml
此外,在你的input.rhtml中,form的action的写法是否有问题?是不是应该为/hello/display
代码本身是没有问题的,因为我把display换成别的名字就可以显示系统时间,就是display这个名字不行,所以我觉得很奇怪~
我刚才试了一下,跟文件后缀名没有关系,和form 的action是/hello/display还是\hello\display也没有关系,感觉就和控制器里的动作名有关,不能是display可以是别的名字,但是想不明白为什么。。。
谁能来帮帮我呀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Keywords in Ruby
alias
and
BEGIN
begin
break
case
class
def
defined
do
else
elsif
END
end
ensure
false
for
if
in
module
next
nil
not
or
redo
rescue
retry
return
self
super
then
true
undef
unless
until
when
while
yield
ReservedWords Of Ruby On Rails
http://wiki.rubyonrails.org/rails/pages/ReservedWords
display是保留字。
对它的说明,如下:
For action, the only problem comes into play when you have a model named Action and feed that to the form helpers. The problem is that the array action[field_names] in the params[] method will be overwritten by Rails. Instead of the form data, you will only get the Controller method, as in ‘create’ or ‘edit’.

By feeding a different word, such as action_data, to form helpers in place of the actual model name you can easily work around this problem. Then, simply access it as params[:action_data] instead of params[:action]. If you are experiencing this problem, you will probably receive the error undefined method `stringify_keys!' for "create":String.

原来是这个样子,多谢飞猪大哥的指点~
不客气。