2013-05-30 33 views
0

我正在使用ruby 1.9.3和mysql 5.5来处理Rails 3.2.9应用程序。我需要编写一个查询,我应该在我的控制器文件的where子句中使用用户定义的变量。这是代码..请让我知道我该怎么做!如果没有我怎样才能将对象转换(我猜是这样),我从代码行中没有4以便让我可以用一个Fixnum进行比较后如何在mysql中使用ruby的用户自定义变量?

def is_user_allowed? 
    @company_id = params[:user][:company_id] 

    #THIS LINES GIVES A SYNTAX ERROR AT '?' 
    @no_of_licenses = Company.find_by_sql("SELECT NO_OF_LICENSES FROM COMPANIES WHERE ID=?",@company_id) 

    #THIS LINE RETURNS AN OBJECT I GUESS N HENCE CANNOT COMPARE WITH FIXNUM 
    @no_of_licenses = Company.find(:first,:conditions => ["id = ?",@company_id] , :select => 'no_of_licenses') 

    @present_users = User.where("company_id = ?", @company_id).count 

    if @present_users < @no_of_licenses 
     return true 
    else 
     return false 
    end 
    end 

回答

1

你只需要调用字段名(列名)在返回的对象上。对于前:

@no_of_licenses = Company.find(:first,:conditions => ["id = ?",@company_id] , :select => 'no_of_licenses').no_of_licenses 

上面的查询可以作为

@no_of_licenses = Company.where(:id => @company_id).pluck(:no_of_licenses).first 
+0

谢谢洛特阿米特!他们都工作:) –

1
@no_of_licenses = Company.find_by_sql("SELECT NO_OF_LICENSES FROM COMPANIES WHERE ID= #{@company_id}") 

我觉得这是..ü想要的简化。

+0

嗯,我不会推荐这个解决方案,因为@company_id直接被从params作为'@company_id = params [:user] [:company_id]''。所以,有可能是SQL注入。 –

+0

即使这个工程.. –

+0

Company.select(:no_of_lincenses).where(:id => @company_id)你也可以使用它。它将在rails 3.2.12中工作 –

相关问题