【问题标题】:Routing error Rails 3.2.1路由错误 Rails 3.2.1
【发布时间】:2012-01-30 13:15:37
【问题描述】:

我正在尝试创建一个非常简单的站点,从 URL(或链接)发送和接收参数,应用程序应该支持任意数量的参数,即http://localhost:3000/action=receive&controller=pages&email=mail%40site.com&name=Vinny,然后能够接收/打印它们。

我想我已经找到了路线的问题。目前看起来是这样的:

match 'pages/*params' => 'pages#receive'

我创建这样发送参数的链接:

<%= link_to "Send Params", :action => "receive", :name => "Vinny", :email => "mail@site.com" %>

当我单击链接时,我收到以下错误。

No route matches [GET] "/assets"

网址如下所示:

http://localhost:3000/assets?action=receive&controller=pages&email=mail%40site.com&name=Vinny

注意资产?

如果我的路线看起来像这样:

match 'pages/:name/:email' => 'pages#receive'

它有效,但我仅限于指定的参数。

任何有关如何解决此问题的提示都会很棒。

【问题讨论】:

  • 即使您正在访问“资产”控制器,硬编码到“页面”控制器(使用参数)的路由也可以工作?如果您特别引用资产怎么办:匹配'assets/*params' ...
  • @BryanH 嗨,不,我没有指定或创建一个名为 Assets 的控制器,我只有一个控制器,Pages。不知道 Rails 为什么要添加 Assets?到我的 URL 帖子。但是,我试图从 URL 中删除 assets?,但我遇到了另一个路由问题。我对 Rails 很生疏,这可能不是向我的控制器发送任意参数的正确方法?
  • @BryanH 好主意,但没有帮助。 :(

标签: ruby-on-rails ruby routes


【解决方案1】:

好的,我想我知道发生了什么。无需在路由中指定参数即可将值放入控制器的操作中。因此,请将您之前在 routes.rb 中指定的 map 替换为

resources :pages

如果您添加到您的链接

:controller => "pages"

它应该转到正确的控制器 + 动作。 (在您的情况下这可能不是必需的)

在该操作中,您可以从哈希中获取所有参数

email = params[:email]
account = params[:name]

等等

【讨论】:

  • 谢谢!您的建议有效,但这并不完全是我正在寻找的结果。我最初的问题可能不够清楚。我想要的是能够发送任意参数,您的解决方案只允许指定的(!?!)参数,例如:电子邮件。例如,用户应该能够在 url 中添加 address=NY 并且页面应该打印它。不知道是否有可能使用 link_to 。可能必须使用一些简单的 CGI 东西(不过 link_to 会更好)。
  • 感谢您的链接,将检查出来。
  • 啊,我没有输入所有参数,因为我很懒(因此是“等”)。您可以通过variable = params[:parameter_name] 获取any 参数的值,其中parameter_name 是参数的名称。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 2012-05-22
  • 2012-07-11
  • 1970-01-01
相关资源
最近更新 更多