会话没有跟踪轨道

时间:2014-06-01 23:36:42

标签: ruby-on-rails session

我正在尝试显示一组电影列表。我想为用户评级(不同类型)和排序顺序(按标题和评级)维护会话和网址参数。但其中一个会议未​​得到维护。

控制器:

def index

  @all_ratings = Movie.ratings
  @sorted_by = (params[:sort_by] || session[:sorted_by] || :none).to_sym
  @selected_ratings = params[:ratings] ? params[:ratings].keys : (session[:selected_ratings] || @all_ratings)

  session[:sorted_by] = @sorted_by
  session[:selected_ratings] = @selected_ratings
  @movies = Movie.where(:rating => @selected_ratings).order @sorted_by

end

每次刷新请求时,都会维护会话[:selected_ratings],但会话[:sorted_by]不会。我以类似的方式制作了它们。但是电影列表的顺序从未得到保留。 params [:sorted_by]每次都有效。请帮忙。

观点:

  %th {params[:sort_by] == "title" ? {:class => "hilite"} : {}}= link_to "Movie Title", movies_path(:sort_by => "title"), :id => "title_header"
  %th Rating
  %th{params[:sort_by] == "release_date" ? {:class => "hilite"} : {}}= link_to "Release Date", movies_path(:sort_by => "release_date"), :id => "release_date_header"
  %th More Info

1 个答案:

答案 0 :(得分:1)

首先,在您的视图中,您应该引用@sorted_by实例var而不是param[:sort_by],因为param可能是nil。

其次,我怀疑params[:sort_by]被设置为空字符串而不是nil,正如您所期望的那样。这会导致or语句在遇到session变量之前发生短路,并且每次都会给你一个空的排序字符串。

要尝试的事项:设置调试器(pry和/或the debugger gem)并在某处的索引方法中添加断点。然后,您可以检查所有内容的值,看看实际发生了什么。