我正在构建一个 Sinatra 应用程序并以线性方式编写它(没有方法)以了解 Sinatra 的工作原理。现在我正在尝试重构它,但是我的表单提交中的参数没有传递给方法。以下是路线:
get '/' do
erb :index
end
post '/' do
session = login(params[:username], params[:password])
get_courses(session, params[:username])
erb :index
end
这是 index.erb
<% if !@courses %>
<form action="/" method="post">
<input type="text" label="username" name="username">
<input type="password" label="password" name="password">
<input type="submit">
</form>
<% end %>
<% if @courses %>
<ul>
<% @courses.each do |course| %>
<li><%= course %></li>
<% end %>
</ul>
<% else %>
<p>No course data yet.</p>
<% end %>
我知道参数正在传递给 Sinatra,因为我能够对它们进行简单的放置,但是当我尝试将它们传递给方法时,我得到一个“ArgumentError at / wrong number of arguments (0 for 2)”。
更新
从与路由相同的文件中,这里是登录方法:
def login(username, password)
login = Savon::Client.new($LOGIN_WSDL)
login.http.auth.ssl.verify_mode = :none
session = login.request(:login) do
soap.body = { :id => username, :pw => password }
end
session.to_hash
end