2017-09-05 55 views
0

我有一个控制器,我传递了表/模型(:object),属性(:key)和搜索条件(:id)的名称:通过表名和变量键在轨中检索所有记录

def getAll 
    obj = params.require(:object) 
    datarecord = obj.classify.constantize 
    key=params[:key] + "= :i"; 
    render json: { result: datarecord.find(:all, :conditions => [ key, {:i =>params[:id]}])} 
end 

不幸的是,我没有得到预期的结果。错误消息是找到0个记录但预计有2个记录。

例如,我通过下面的参数在我的控制器: 对象:“机遇”号 键:“ACCOUNT_ID” ID:2

结果,我想要检索的机会,表中的所有记录,其中属于account_id = 2的帐户。

任何想法我的代码中有什么问题?

谢谢, 迈克尔

回答

0

解决方案:

def getAll 
    obj = params.require(:object) 
    datarecord = obj.classify.constantize 
    render json: { result: datarecord.where(params[:key] => params[:id]) } 
end 

建议:

def get_all 
    model = params.require(:model).safe_constantize 
    conditions = params[:conditions].to_h 
    records = model.where(conditions) 
    render json: { result: records } 
end 
  • 实施例请求:
    • 模型= '机会'
    • 条件= { 'ACCOUNT_ID'=> 2}
+0

伟大的!谢谢你的作品! –

0

.find总是返回1个记录你想要什么(如果我理解正确的)是datarecord.where(key => params[:id])

where将返回所有的记录,你已经有钥匙和钥匙应该是的价值