我是ROR的初学者。当我在一本书上测试代码时遇到了一个问题。我一步一步地跟着它,但错误出现了......
CaculatorController中的NoMethodError#calculate
undefined method `[]=' for nil:NilClass
Rails.root:/ home / toth4321 / calculator
app/controllers/caculator_controller.rb:4:in `set_charset'
控制器
class CaculatorController < ApplicationController
before_filter:set_charset
def set_charset
@headers['Content-Type'] = 'text/html; charset=GB2312'
end
def calculate
if request.post?
arg1 = convert_float(:arg1)
arg2 = convert_float(:arg2)
op = convert_operator(:operator)
@result = op.call(arg1, arg2)
end
end
private
def convert_float(name)
Float (params[name])
end
def convert_operator(name)
case params[name]
when "+" then proc {|a,b| a+b}
when "-" then proc {|a,b| a-b}
when "*" then proc {|a,b| a*b}
when "/" then proc {|a,b| a/b}
end
end
end
视图
<html>
<head>
<title>簡單的網頁計算器</title>
</head>
<body>
<%= form_tag(:action => :calculate) %>
<%= text_field_tag(:arg1, @params[:arg1], :size =>3) %>
<%= select_tag(:operator, options_for_select(%w{+ - * /})), @params[:operator])) %>
<%= text_field_tag(:arg2, @params[:arg2], :size =>3) %>
<%= submit_tag("送出") %>
<% end_form_tag %>
<b><%= @result %></b>
</body>
</html>
有人能帮帮我吗?
非常感谢!
答案 0 :(得分:0)
不知道@headers
做了什么,但据我所知,你还没有在任何地方定义它。尝试:
def set_charset
@headers = {'Content-Type' => 'text/html; charset=GB2312'}
end
答案 1 :(得分:0)
从@
删除@headers
,因为它不是实例变量,而是response.headers
哈希的委托方法:
headers['Content-Type'] = 'text/html; charset=GB2312'
答案 2 :(得分:0)
请尝试添加以下代码来运行。
before_filter :set_charset
def set_charset
@headers["Content-Type"] = "text/html; charset=GB2312"
end