0

我有几个链接:

<%= 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

但是以下所有网址都记录“索引”?

  • .../捕获
  • .../捕获#照片
  • .../捕捉#视频
  • .../捕获#audios

路线.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
4

4 回答 4

1

在 rails 4.0 中,您可以通过控制器中的 GET 请求附加和传递属性。

于 2014-07-16T15:56:48.127 回答
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 %>

最后,纯粹基于您向我们展示的有限代码,实际上听起来您应该拥有名为,等的资源,每个资源都有自己的控制器,方法是使用“捕获”作为命名空间并为每种类型制作单独的控制器:photosaudios

namespace :captures do
  resources :photos
  resources :photo_booths
  #etc
end

然后每个人都有一个index动作来服务于控制器中每个方法的当前功能。然后你的链接看起来像:

<%= link_to "", captures_photos_path %>
于 2013-01-22T03:44:18.420 回答
0

这将在很大程度上取决于您在routes.rb文件中定义的路由,但无论如何您都不能使用哈希部分(在 之后的任何内容#)作为路由的一部分。事实上,浏览器甚至不会将它发送到服务器。您很可能希望您的 URL 看起来像:

../captures
../captures/photos
../captures/videos
../captures/audios

通常最好不要link_to像这样在函数中指定 URL。你想使用你的路由辅助函数来提供它们,以防你的路由发生变化。

我建议阅读Ruby on Rails Guide to Routes。这将提供很多关于如何使用 Rails 中内置的功能来充分利用您的路线的见解。

于 2013-01-22T03:26:55.347 回答
0

routes.rb 中

get "/captures/:format"

无论您在哪个capture_controller.rb方法中都需要它:

@format = params[:format]

然后,您相关视图中的任何位置都@format将输出photosvideosaudios

于 2013-01-22T03:27:03.587 回答