【问题标题】:where does rails get the queries for nested objects?rails 在哪里获取嵌套对象的查询?
【发布时间】: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

标签: ruby-on-rails jquery-ui-sortable nested-forms


【解决方案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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多