我正在学习一门关于Rails的课程,我需要"记住"用户在https请求中选择的值,以便过滤列表。
我应该在session
"哈希"中执行此操作。
下面是我的索引:
def index
#list all different values for the key ratings
@all_ratings = Movie.uniq.pluck(:rating)
#order movie list based on interaction with link from view
@movies = Movie.order(params[:sort_param])
#filter movies by rating, based on checkbox from view
@movies = @movies.where(:rating => params[:ratings].keys) if params[:ratings].present?
# I intend to store here the ratings selected, and then save in session
@selected_ratings = params[:ratings].present? ? params[:ratings] : [])
#It gives this error: undefined local variable or method `selected_ratings'
session[:selected_ratings] = @selected_ratings
end
以下是我的观点:
%h1 All Movies
= form_tag movies_path, :method => :get do
Include:
- @all_ratings.each do |rating|
= rating
= check_box_tag "ratings[#{rating}]", @all_ratings, @selected_ratings.include?(rating)
= submit_tag 'Refresh'
%table#movies
%thead
%tr
%th{:class=> helper_class('title'), :id => ('title_header')}= link_to 'Movie Title', movies_path(sort_param: 'title')
%th Rating
%th{:class=> helper_class('release_date'), :id => 'release_date_header'}= link_to 'Release Date',movies_path(sort_param: 'release_date')
%th More Info
%tbody
- @movies.each do |movie|
%tr
%td= movie.title
%td= movie.rating
%td= movie.release_date
%td= link_to "More about #{movie.title}", movie_path(movie)
现在的问题是:
- 当我在视图中呈现调试时,我选择了一个过滤器(在本例中是PG),我得到了这个:
--- !ruby/hash-with-ivars:ActionController::Parameters
elements:
PG: G R PG-13 PG
ivars:
:@permitted: false
我不太明白,我猜ivars
是示例变量,但我不知道为什么哈希没有显示在正确的{hash}
中,而且只显示选定的值。
- 我如何使用
session[:selected_ratings]
来记住电影的过滤器?我的意思是,我如何使用session作为参数。
或许:
@movies =@movies.where(:rating => session[selected_ratings].keys)
- 我在哪里可以读到关于如何使用会话、如何存储、如何访问和使用存储的参数...我读过这个、that,还有一些关于会话、身份验证的博客...但是除了博客中描述的情况外,我没有设法理解和应用到其他情况。
2条答案
按热度按时间yrefmtwq1#
如果定义了selected_ratings,为什么会出现未定义变量错误?
定义了
@selected_ratings
;selected_ratings
不是。我认为,您 * 想要 * 做的事情类似于:注意,这里使用的是 * 符号 *,而不是未定义的 * 变量 *。
假设会话[selected_ratings]有效,我如何使用它来过滤电影?@movies =@movies.其中(:评级=〉会话[选定的评级].键)
那么,
@selected_ratings
等于什么?我猜它可能是一个评级数组,对吧?-类似于:["PG", "PG-13", "R"]
。在这种情况下,ActiveRecord
非常聪明,可以生成SQL,您只需执行以下操作:最重要的是,我在哪里可以读到关于如何使用会话,如何存储,如何访问和使用存储的参数...我读了这个,那个,还有一些关于会话,身份验证的博客...但是我没有设法理解和应用到博客中描述的其他情况。
这有点含糊我不知道除了Rails文档之外还有什么建议可以给初学者提供。如果你有更具体的问题,我很乐意帮助你。
rqenqsqc2#
未定义错误是因为您引用了未定义的变量
selected_ratings
(您定义了@selected_ratings
,这不是一回事)。要回答第二个问题,您可以这样做:
session
散列很容易使用。你可以像使用普通散列一样保存和检索值。