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 /間違った数の引数(2に対して0)」が発生します。

アップデート

ルートと同じファイルから、ログイン方法を次に示します。

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あるかHashWithIndifferentAccess、キーが#paramsメソッドの一部として自動的にシンボル化されていることが反映されているようです。

それがあなたが経験しているのと同じ問題なのか、それが意図しない振る舞いなのか、シナトラなのか、それとも私がドキュメントを読むのが苦手なのかはわかりません。

于 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 に答える