2013-02-25 50 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