>我有几个链接:
<%= 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
但是以下所有网址都记录"索引"?
- 。。。/捕获
- .../捕获#照片
- .../捕获#视频
- .../捕获#音频
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
在 rails 4.0 中,您可以通过控制器中的 GET 请求附加和传递属性。
In routes.rb:
get "/captures/:format"
无论在哪种captures_controller.rb方法中,您都需要它:
@format = params[:format]
然后,相关视图中的任何位置@format
将输出 photos
、 videos
或 audios
。
这将在很大程度上取决于您在routes.rb
文件中定义的路由,但无论如何,您都不能使用哈希部分(#
之后的任何内容)作为路由的一部分。事实上,浏览器甚至不会将其发送到服务器。您很可能希望网址如下所示:
../captures
../captures/photos
../captures/videos
../captures/audios
通常,最好不要在这样的link_to
函数中指定 URL。您希望使用路由帮助程序函数来提供它们,以防路由发生更改。
我建议阅读Ruby on Rails Guide to Routes。这将为如何使用 Rails 内置的功能来充分利用您的路线提供很多见解。
您不使用link_to
中的controller#action
表示法。您必须为其提供路径(如/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
等的资源,每个资源都有自己的控制器,通过使用"captures"作为命名空间并为每种类型制作单独的控制器:
namespace :captures do
resources :photos
resources :photo_booths
#etc
end
然后,每个方法都有一个index
操作,该操作为控制器中每个方法的当前功能提供服务。然后您的链接如下所示:
<%= link_to "", captures_photos_path %>