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 中的 TypeORM - 如何在实体中获取 MySQL 嵌套对象并对子关系进行“位置”查询?