我正在处理Rails 3,我似乎无法从结果集中进行基本查找。我的代码如下所示:
@project =
@user.where({:projects => {:project_member_id => user.id}}).find_by_id(params[:id])
我理解“where”部分不会返回集合,只是创建一个等待对db运行的查询。但是,当我尝试运行find_by_id时,我无法理解为什么会出现以下错误:
undefined method `to_sql' for #<Arel::Attributes::String:0x106d9ecf0>
有人可以指出我出错的地方吗?
答案 0 :(得分:0)
可能你可以这样写:
@project =
@user.where({:projects => {:project_member_id => user.id}}).where(:id => params[:id])
我认为它会奏效。
亚历。
答案 1 :(得分:0)
我可能会误解你在这里尝试做什么,但看起来你在用户模型中有一个名为projects
的关联,对吧?如果是这样,这更简单(并且有效):
@project = @user.projects.find params[:id]
如果您没有关联设置,则应该查看它们。关于这个主题有一个很棒的导轨here。
我希望这会有所帮助。
答案 2 :(得分:0)
如上所述,“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的项目(这可能代价很高,而且可能不是你想要的)......
祝你好运!答案 3 :(得分:0)
尝试
@project =
@user.where({:projects => {:project_member_id => user.id}}).where(:id => params[:id]).first
但是我不明白为什么当你拥有主键时你正在做这些事情。我认为Model.find params[:id]
已经足够了(我认为还有更多内容)。
答案 4 :(得分:0)
试试这个:
@project = @user.where({:projects => {:project_member_id => user.id}}).all.find {|p| p.id == params[:id]}