rails 在哪里获取嵌套对象的查询?

Posted

技术标签:

【中文标题】rails 在哪里获取嵌套对象的查询?【英文标题】:where does rails get the queries for nested objects? 【发布时间】:2011-06-29 09:58:56 【问题描述】:

我有一个使用 formtastic_cocoon (jquery) 的漂亮的 3 级嵌套表单,现在我希望能够对表单中的第二组项目进行排序。

我的 jQuery ui 工作没问题,所以现在设置和更新 rails 中的排序顺序。

我开始关注 railscasts 可排序列表的 rails bits http://asciicasts.com/episodes/147-sortable-lists

表单结构为User->Tasks->Location。

在我的任务模型中,我将索引设置为

定义索引 @task = Task.find(params[:id],:order=>'position') 结尾 定义编辑 @task = Task.find(params[:id],:order=>'position') 结尾

我期待我的控制台能看到

... FROM 'tasks' WHERE ('users'.'id' = 12) ORDER BY ('position')

或类似的东西,但没有输出顺序。

还有什么地方需要我定义这个顺序吗? nested_object 从哪里得到它的关系?只有模型?

我的模特是

类用户

【问题讨论】:

这真的是你的代码吗? def edit @task = Task.find(params[:id],:order=>'position') end 【参考方案1】:

我把模型改成

类用户 'position' 结尾

【讨论】:

【参考方案2】:

您使用了错误的模型,该 id 是用户的,所以您必须这样做:

User.find(params[:id]).tasks(:order => 'position ASC')

否则你只是得到id = 12的任务,而不是user_id = 12的任务

【讨论】:

将我的模型更改为您的建议会以某种方式破坏用户的 has_attached_file。不知道为什么。【参考方案3】:

根据您给出的答案,我怀疑真正的问题不在于任务控制器。您给出的默认顺序很好,但如果您有其他顺序或过滤要求,任务模型也不会完全这样做。

我怀疑您实际上是在 users#edit 中,或者可能是 _form.html.erb,它在其中显示每个任务的表单元素。可能存在 @user.tasks.each ... 或类似的循环块。

然后,对于给定的用户,执行:@user.tasks.order(:position)。或者您可能需要打开任务:@user.tasks.where(:open=>true) 等。

【讨论】:

你是在视图中建议 .order(:position) 吗?? 在视图中,或者你可以为它创建一个范围。【参考方案4】:

您的代码在这里略有错误。

要查找该用户的任务,您可以在路线中执行以下操作:

User.find(params[:id]).tasks(:order=>'position')

【讨论】:

以上是关于rails 在哪里获取嵌套对象的查询?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 从父数据中获取数据并在嵌套视图中显示为页面标题(标题)

如何在 Nestjs 中获取嵌套的 URL 查询

NestJS 中的 TypeORM - 如何在实体中获取 MySQL 嵌套对象并对子关系进行“位置”查询?

在为嵌套对象创建自定义 Spring Data JPA 查询时获取 IllegalArgumentException

Graphql Django 获取嵌套对象属性的最佳方法

休眠从对象中延迟获取嵌套列表