我有几个链接:
<%= link_to "", '../captures#photos' %>
<%= link_to "", '../captures#videos' %>
<%= link_to "", '../captures#audios' %>
他们传递给captures_controller.rb
如何解析参数(照片/视频/音频)而不是控制器中的索引?
目前我在控制器中有:
def photos
logger.debug 'photos'
end
def videos
logger.debug 'videos'
end
def audios
logger.debug 'audios'
end
def index
logger.debug 'index'
end
但是以下所有网址都记录了“index”?
routes.rb中:
# these were when I was trying the links without the hashes
match 'captures/photos' => 'captures#photos'
match 'captures/videos' => 'captures#videos'
match 'captures/audios' => 'captures#audios'
resources :captures
resources :photos
resources :audios
resources :videos
答案 0 :(得分:1)
在rails 4.0中,您可以通过控制器中的GET请求附加并传递属性。
答案 1 :(得分:0)
这将在很大程度上取决于routes.rb
文件中定义的路由,但无论您是否在路由中使用散列部分(#
之后的任何内容)都是如此。事实上,浏览器甚至都不会将它发送到服务器。您最有可能希望自己的网址如下所示:
../captures
../captures/photos
../captures/videos
../captures/audios
通常,最好不要在link_to
这样的函数中指定您的网址。您希望使用路由帮助程序函数来提供它们,以防路由发生变化。
我建议阅读Ruby on Rails Guide to Routes。这将为如何使用Rails中内置的功能提供大量见解,以充分利用您的路线。
答案 2 :(得分:0)
在 routes.rb :
中get "/captures/:format"
无论您使用哪种 captures_controller.rb 方法:
@format = params[:format]
然后,相关视图中的任何位置@format
都会输出photos
,videos
或audios
。
答案 3 :(得分:0)
您不在controller#action
中使用link_to
表示法。您必须为其指定路径,例如/captures/photos
或明确指定一些参数。试试这个:
<%= link_to "", :controller => "captures", :action => "photos" %>
我也会在routes.rb中这样做以简化:
resources :captures
get :photos
get :photo_booths
get :videos
get :audios
end
可以让你这样做:
<%= link_to "", photos_captures_path %>
最后,纯粹基于您向我们展示的有限代码,实际上您应该拥有名为photos
,audios
等的资源,每个都有他们的自己的控制器,通过使用“捕获”作为命名空间并为每种类型制作单独的控制器:
namespace :captures do
resources :photos
resources :photo_booths
#etc
end
然后每个人都有一个index
动作,用于控制器中每个方法的当前功能。然后您的链接看起来像:
<%= link_to "", captures_photos_path %>