问题标签 [nested-resources]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - 从 URL 获取父资源
我有两个具有 has_many 关系的对象(@stacks 和@stories)(通过@anthologies)。故事可以单独查看 (/stories/1/) 或作为堆栈中的集合 (/stacks/1/stories/1/)。
我已经有了这个基本框架,我正在尝试确定故事何时被渲染为堆栈的一部分,以便我可以在故事之间建立一些导航。我认为最简单的方法是检查主控制器的 URL,但是 1)我不知道如何做到这一点,并且 2)它似乎非常不符合 Railsy,就像应该有更直接的方法一样。
仍然在这里了解 Rails 的一些基础知识——关于如何实现所需功能的任何建议?
ruby-on-rails - 嵌套资源中的 Rails RESTful 删除
好的,这是一个示例场景。有一个学生资源resources :students
,学生拥有并属于许多收藏:resources :clubs
、resources :majors
等。
所以我们可以很容易地设置我们的路线......
它为我们生成了一堆标准的 RESTful 路由
- /俱乐部
- /俱乐部/:身份证
- /clubs/:club_id/学生
- /clubs/:club_id/students/:id
- /专业
- /专业/:id
- /majors/:major_id/学生
- /majors/:major_id/students/:id
- /学生
- /学生/:身份证
- /students/:student_id/clubs
- /students/:student_id/clubs/:id
- /students/:student_id/专业
- /students/:student_id/majors/:id
所以这是我的问题。使用 REST 语义,如何删除学生的专业?浏览专业下的学生/majors/:major_id/students/:id
将显示该学生在特定专业的“收藏”中。但是删除 :id 的路径指向StudentsController#destroy
,这将完全删除学生。哎呀!所以也许我们走另一条路,对资源执行 DELETE,/students/:student_id/majors/:id
现在这所学校不再提供 UnderwaterBasketweaving……哎呀!
现在,我们可以设置 ClubsController、MajorsController 或 StudentsController 的 destroy 方法来查找 club_id、major_id 或 student_id,但假设我们还想添加 Fraternities 和 GraduatingClasses 等。每个类都将开始由巨大的开关条件组成,以查看存在什么参数...然后找到顶部资源的集合并删除底部资源,反之亦然。如果模型没有更多的关联记录,他们自己应该决定是否删除自己......对该资源的“销毁”已经成为一个用词不当......
有没有更简单的方法来做到这一点?甚至流行的 restful rails 插件也喜欢make_resourceful
或resource_controller
会在从 Joe's Majors 中删除 UnderwaterBasketweaving 时将其吹走,或者在将 JohnDoe 从主要的 UnderwaterBasketweaving 中删除时完全删除他。似乎有可能查看关联以了解语义的预期效果以及“破坏”应该做什么。
再说一次,我看这一切都错了吗?不是 UnderwaterBasketweaving -> Joe 而是 UnderwaterBasketweaving+Joe 作为单一资源,我们要删除的确实不是 Joe,也不是 UnderwaterBasketweaving,而是代表组合的资源?但是,当控制器是 Student 和 Majors 时,这并不容易,这实际上代表了同名的资源(MVC 已经真正成为 RV ......在“约定”方法中,而不是开发可能与模型名称无关的控制器,或到达它的路径)因此您将删除专业或学生;选择你的毒药...
我如何避免在关联资源的无限图上管理条件,当删除确实不是意图时,删除是在集合的上下文中而不是与它的奇点有关...?
... major.student.delete
... 有没有办法让“学生”ActiveRecord 对象知道它在以“主要”AR 对象开头的方法链中发送了“删除”消息?
ruby-on-rails - 使用嵌套控制器
由于我的站点有一个管理部分和一个普通(前端用户)部分,因此我需要以 RESTful 的方式构建文章控制器。
所以我所做的是,有 2 个文章控制器,1 个嵌套在 admin 命名空间下(这将导致 admin/articles),另一个作为普通文章资源(/articles)。(我关注了这个博客。)
现在我开始面临诸如
2个问题。
- 这个错误真的是因为我使用了这样的嵌套资源结构吗?
- 使用这样的结构是一种好的编程习惯吗?如果没有,有没有更好的选择?
谢谢!
ruby-on-rails - 功能测试中的路由问题
我正在制作一个简单的测试项目来为我的测试做准备。我对嵌套资源相当陌生,在我的示例中,我有一个 newsitem,每个 newsitem 都有评论。
路由看起来像这样:
我目前正在为评论设置功能测试,但遇到了一些问题。
这将获得新闻站点评论的索引。@newsitem 在 ofc 的设置中声明。
但问题出在这里,在“应该得到新的”。
我收到以下错误。
但是当我查看路由表时,我看到了:
我不能使用名称路径或我在这里做错了什么吗?
提前致谢。
ruby-on-rails-3 - 如何让 form_for 为嵌套资源工作 - 稍作改动
我希望在它自己的表单上添加/编辑子模型,而不是在父表单中。
我见过的任何示例都将孩子添加到与父母相同的表单上。由于我在单独的表单上添加了添加/编辑的扭曲,我想知道这是否是我收到以下错误的原因:
未定义的方法`chapters_path' ...
路线.rb:
书.rb:
章节.rb
_form.html.erb:
我想我仍然需要使用嵌套资源方法,因为我想用诸如 books/1/chapters/new 之类的 url 添加孩子——因为那将是正确的 rails 方法,不是吗?或者也许我看错了。
非常感谢任何帮助。
ruby-on-rails-3 - Rails 3 - 嵌套资源路由 - 一对一关系
一些嵌套资源路由遇到问题。我想要做的是链接到用户的个人资料页面以进行编辑。在我看来,它写成:
哪些错误:
在我的 routes.rb 文件中,它看起来像这样:
我检查了我的 Rake 路线,它给了我一个有效的选项:
我可以手动导航到。为了采取好的措施,这是我的控制器的证明:
无论如何,我一直在追踪这个问题。任何指针都会有所帮助。对于我的数据库设计,配置文件属于一对一关系的用户。我希望这只是一些新事物,我没有注意到一组新的眼睛可能会有所帮助。
ruby-on-rails - Rails 嵌套单一资源路由
我有一个简单的用户模型和一个单一的嵌套配置文件资源,所以在我的 routes.rb 中我有:
这会生成预期的路线:
我创建了一个简单的控制器更新方法来更新模型,然后在成功更新后重定向:
问题是,一旦提交表单,表单就会重定向到 mydomain.com/users/4/profile.22,其中 22 恰好是配置文件的 id。显然,这会使控制器感到困惑,因为路由将“22”解释为格式。
我的问题是,如何让它重定向到 mydomain.com/users/4/profile 呢? 我在 redirect_to 语句上尝试了以下变体,但均无效,它们都导致相同的错误 url:
更重要的是,在其他地方使用 'user_profile_path(@user)' 会产生正确的 url。
有任何想法吗?哦,如果有帮助的话,我正在使用 Rails 3.0.0 和 Ruby 1.9.2。
ruby-on-rails-3 - Rails 3 - 会话和路由!
我正在构建一个具有多个项目的网络应用程序。通用数据模型是这样的,每个项目都有许多资源,例如文档、寄存器等。大致如下:
困难来自于路由!!对项目的任何 C UD 操作都将通过命名空间完成。但是,当用户查看项目时,我希望路由中的 project_id 如下所示:
'0.0.0.0:3000/:project_id/documents/
或者
我想到了类似的东西:
我想我要将 project_id 存储在会话中?如果我放弃这些路线以获得更简单的东西,例如:
然后如何将任何 CRUD 操作绑定到文档或注册到当前项目?当然,我不必将它硬连接到每个控制器中吗?
帮助!
ruby-on-rails - Rails 命名空间与嵌套资源
假设我的应用有两个模型,Foo 和 Bar。
Foo 可选belongs_to Bar。
现在我可以查看一个 Foo,或者搜索一个特定的 Foo,而 FoosController 会处理所有这些。我的网址是:
foos/1
和foos/new
有时我想看看一个酒吧。BarsController 处理它,我像这样处理它:
bars/1
或bars/1/edit
.
如果我正在查看 Bar,我可能想浏览属于该 Bar 的所有 Foos。所以,我想bars/1/foos/
用来看看那些Foos。
这对于嵌套资源来说非常简单,看起来像这样:
但是,作为 Bar 一部分的 Foo 有点特殊,与常规 Foo 不同。因此,例如,如果我加载foos/1
or bars/1/foos/1
,我将查看相同的 Foo,但我在每种情况下都关注不同的信息。
所以我一直在考虑让 BarFoos 控制器在 Bar 的上下文中处理 Foos。但是,如果我将 BarFoos 嵌套在 Bar 下,那么我的助手将类似于bar_bar_foos_path
and new_bar_bar_foo_path
。这似乎是多余的。
所以,现在我正在考虑命名空间,这是我以前从未研究过的。我在 Rails 指南中看到我可以定义:
如果我这样做了,我可以FoosController
在.app/bar/
bar_foo_path(:id)
bar_bar_foo_path(:id)
但如果我这样做,我的会发生什么BarsController
?请求如何路由到BarsController
if 而不是resources :bars
I have namespace "bar"
?
最后,在我的辅助 FoosController 中我需要做些什么特别的事情来确保与顶级 FoosController 没有名称冲突?我意识到路由说“命名空间”,但是其余的 ruby 代码如何知道app/bar/foos_controller
andapp/foos_controller
不是同一个类?
谢谢!