2013-02-25 46 views
0

我试图让这些语句的工作::条件语句和Ruby Rails的

@all_ratings = ["G","PG","PG-13","R"] 
@valid_ratings = params["ratings"] 
@movies = Movie.find(:all , :conditions => {@valid_ratings[:rating.upcase] => "1"} ) 

但我得到的错误:

undefined method `to_sym' for nil:NilClass 

时,我应该得到匹配。

一个例子输入:

"ratings"=>{"PG-13"=>"1"} 

我要去哪里错了?


更多信息:

该表有三个字段,标题,发布日期和等级,是非常简单的。评级选项在@all_ratings之上。

+0

'@valid_ratings [:rating.upcase]'的实际值是多少?这可能是'无'。另请注意,除非您使用的是Rails 2.3或更早的版本,否则您应该避免使用'find(:all,...)'语法,因为它在Rails 4中已被弃用。 – 2013-02-25 03:35:06

+0

如果您可以描述您的表格描述,那将是完美的..! – ksugiarto 2013-02-25 03:36:31

回答

0

的Rails 3.x中:

@all_ratings = ["G","PG","PG-13","R"] 
@valid_ratings = params["ratings"] 
# Is @valid_ratings the same as you example, "ratings"=>{"PG-13"=>"1"}? 
# It would be easiest to pass a subset of @all_ratings such that the params 
# get converted to something like this: "ratings"=>["G", "PG"] 
Movie.where(:rating => valid_ratings).all 
# SQL: SELECT * FROM movies WHERE rating IN ('G','PG') 

我不知道你正在尝试与:rating.upcase。是否有名为评级的变量? :rating是一个符号。 upcase不是符号上的方法。

0

它会告诉你,你在@valid_ratingsnil

你可能想这样做呢?

@valid_ratings = Rating.find(params["ratings"]) 
+0

你在这里推断了很多关于OP的对象模型。 – 2013-02-25 03:37:17

+0

我的模型是电影,评级是其中的一个领域 – 2013-02-25 03:38:24

+0

Rating.find将返回一个评级。 find_all将返回一个数组。正如@ Lilluda5提到的那样,她想要按照给定的评级返回电影。 – 2013-02-25 04:05:14