Ruby 参数未传递给Sinatra中的方法

Ruby 参数未传递给Sinatra中的方法,ruby,sinatra,params,Ruby,Sinatra,Params,我正在构建一个Sinatra应用程序,并以线性方式编写(无方法)来了解Sinatra的工作原理。现在我正在尝试重构它,但是表单提交中的参数没有被传递给方法。以下是路线: get '/' do erb :index end post '/' do session = login(params[:username], params[:password]) get_courses(session, params[:username]) erb :index end 这是inde

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

如果这是显而易见的,我深表歉意,但您是否在任何方法中定义了@courses

大概是这样的:

def get_courses(session, username)
  # ...
  #some logic to figure out courses based on session and username
  # ...
  @courses = ["Some course", "Another course"]
end

我在当地也遇到了这件事

我发现,出于我还不清楚的原因,
#params
散列
中的键总是
字符串
,而不是
符号
。Sinatra文档似乎反映了
散列
要么是
无差异访问的散列
,要么键被自动符号化为
参数
方法的一部分


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

错误发生在哪一行?错误发生在“session=login(params[:username]、params[:password])和“get_courses(session,params[:username])”如果您认为有帮助的话,我可以发布回溯的要点。很难判断发生了什么,因为您没有包括正在使用的控制器方法(login和get_courses)。如果错误是错误的参数数量(2代表0),那么我可以进行一些猜测,但是您的错误表示您为需要2个参数的方法定义提供了0个参数,如果没有更多的信息,就很难诊断您的问题。我已经更新了问题,以包括方法。我不认为错误是您所认为的。这个要点很好用,在“登录”后打印用户名/密码。是的,定义了@courses,但它甚至没有那么远。我认为问题不在Sinatra。在此要点中,我修改了您的登录方法,只提供了一个散列(并加入了一个简单的get_courses方法),它似乎工作正常:您使用的是Ruby/Sinatra版本吗?你能把它们转换成符号吗?如果只是作为字符串访问它们,您可以正常工作吗?我知道这些都不是解决办法,我只是想知道问题有多严重。
def get_courses(session, username)
  # ...
  #some logic to figure out courses based on session and username
  # ...
  @courses = ["Some course", "Another course"]
end