将参数传递到控制器导轨



>我有几个链接:

<%= 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将输出 photosvideosaudios

这将在很大程度上取决于您在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 %>

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

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

然后,每个方法都有一个index操作,该操作为控制器中每个方法的当前功能提供服务。然后您的链接如下所示:

<%= link_to "", captures_photos_path %>

相关内容

  • 没有找到相关文章

最新更新