Fiddy ,因为你是新的,让我解释它是如何工作的...
Routes
你的问题是,你不明白的Rails路由结构 - 我希望能为你解释它。
Rails,因为它是一个MVC框架,为您创建一系列“路线”。这些“路线”存储在config/routes.rb
的文件中。
路线,如由Rails文档描述如下:
Rails的路由器识别的URL并将它们分派到控制器的 动作。它还可以生成路径和URL,避免在您的视图中需要硬编码字符串 。
您应该考虑的最重要的事情就是您的方式the routes generate paths。这些路径只是Rails的“助手”方法,您可以从视图中调用这些方法。这些存在的理由有两方面 -
- 他们提供了访问/操纵数据的DRY (don't repeat yourself)方式
- 他们围绕对象构建,有助于保持Rails的
的面向对象的性质
这些可能对你没有任何意义。但是,您需要认识到,如果正确设置路线,它会非常有效地帮助您的应用程序的基础架构。
-
Rails的
这使我们很好地欣赏到其中的Rails工作
Rails是一个MVC (model view controller)框架的方式。这似乎有点微不足道,但在现实中,它是了解Rails开发的最重要的方面之一,这里的原因:
Rails的软件系统的工作原理,采取“请求”(用户输入)然后路由他们到具体的controller#actions
。这些控制器然后从数据库中构建model
数据,并将其转换为变量或对象,您可以在view
中使用这些变量或对象。
我之所以提到这一点,是因为这种类型的开发需要大量的习惯,因为程序的流程不是关于逻辑/功能,而是数据的可访问性。因此,当您询问路线或您的应用程序的其他部分时,您需要先记住您希望显示的数据以及您希望如何显示这些数据 - 这将使您能够构建使用&这将得到它的工作路线/控制器动作正确
-
修复
在你说的话,你去实现你想要的结果的方式方面将会使用一个nested route:
#config/routes.rb
resources :songs do
resources :samples #-> domain.com/songs/:song_id/samples/new
end
这将为您创建一条新路线(您可以通过在您的rails c
(控制台)中点燃rake routes
进行检查。这会给你一个路径使用您samples#new
行动:
#app/views/songs/show.html.erb
<%= link_to @song.name, new_song_sample_path(@song) %>
上面的链接将带您到samples#show
动作,你就可以作为你从需要与尽可能多的数据来填充samples
控制器。重要的是要注意的是,这个动作将有params[:song_id]
可用于您从或建立一个对象,或者
我得到一个错误“无路由匹配[POST]”/ samples/new“”。我的路线是资源:歌曲和资源:样本 – fiddy 2014-09-20 03:49:38
这应该是一个link_to的GET。你是否试图在表单中使用它? – DGM 2014-09-21 00:19:04