1

我正在构建一个 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
4

2 回答 2

0

我也只是在本地遇到了这个。

我发现,由于我不清楚的原因,中的键#params Hash总是Strings而不是Symbols. Sinatra 文档似乎反映了Hash是 a HashWithIndifferentAccess,或者键被自动符号化为#params方法的一部分。

不确定这是否与您遇到的问题相同,是否是意外行为或 Sinatra,或者我只是不擅长阅读文档。

于 2012-06-17T01:33:42.320 回答
0

如果这很明显,请道歉,但是您是否在任何方法中定义了 @courses ?

像这样的东西:

def get_courses(session, username)
  # ...
  #some logic to figure out courses based on session and username
  # ...
  @courses = ["Some course", "Another course"]
end
于 2012-04-16T16:17:22.070 回答