将参数传递给控制器​​导轨

时间:2013-01-22 03:22:00

标签: ruby-on-rails ruby-on-rails-3

我有几个链接:

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

4 个答案:

答案 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都会输出photosvideosaudios

答案 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 %>

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

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

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

<%= link_to "", captures_photos_path %>