繁体   English   中英

将参数传递到控制器导轨

[英]Passing params to the controller rails

我有几个链接:

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

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

  • ... /捕获
  • ... /拍摄#照片
  • ... /捕获#视频
  • ... /捕获#音频

route.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请求附加和传递属性。

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

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

通常,最好不要在此类的link_to函数中指定您的URL。 您想使用路由助手功能来提供它们,以防您的路由发生更改。

我建议阅读Ruby on Rails Routes指南 这将为如何使用Rails内置的功能提供最大的洞察力,从而使您的路线获得最大收益。

routes.rb中

get "/captures/:format"

无论使用哪种captures_controller.rb方法,都需要使用以下命令:

@format = params[:format]

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

您无需在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等的资源 ,每个资源都有其自己的控制器,方法是使用“捕获”作为名称空间并为每种类型分别设置控制器:

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

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

<%= link_to "", captures_photos_path %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM