正在尝试对ActiveRecord::Relation调用find_by_id,Arel异常



我正在掌握Rails3,但我似乎无法从结果集中进行基本的查找。我的代码如下所示:

@project = 
   @user.where({:projects => {:project_member_id => user.id}}).find_by_id(params[:id])

我知道"where"部分不会返回集合,而只是创建一个等待对数据库运行的查询。然而,我不明白为什么我在尝试运行find_by_id:时会出现以下错误

undefined method `to_sql' for #<Arel::Attributes::String:0x106d9ecf0>

有人能指出我哪里错了吗?

也许你可以写这样的东西:

@project = 
   @user.where({:projects => {:project_member_id => user.id}}).where(:id => params[:id])

我认为它会起作用。

亚历克斯。

我可能误解了您在这里试图做的事情,但在用户模型中似乎有一个名为projects的关联,对吧?如果是这样的话,这就简单多了(而且有效):

@project = @user.projects.find params[:id]

如果您没有关联设置,您应该查看它们。关于这个问题,这里有一本很棒的铁路指南。

我希望这能有所帮助。

如上所述,"where"将返回ActiveRecord::Relation对象,您可以通过运行:来检查它

@project = 
   @user.where({:projects => {:project_member_id => user.id}}).class

为了返回实例化对象的集合并运行find,您可以尝试通过运行以下命令来强制它:

@project = 
   @user.where({:projects => {:project_member_id => user.id}}).all.find_by_id(params[:id])

喜欢Rails中的链接方法!

然而,这将首先找到所有通过uesr.id的项目(这可能很昂贵,而且可能不是你想要的)。。。

祝你好运!

尝试

@project = 
   @user.where({:projects => {:project_member_id => user.id}}).where(:id => params[:id]).first

但是我不明白你为什么带着钥匙就这么干。。我认为仅仅Model.find params[:id]就足够了(我认为还有更多的东西)。

试试这个:

@project = @user.where({:projects => {:project_member_id => user.id}}).all.find {|p| p.id == params[:id]}

相关内容

  • 没有找到相关文章

最新更新