【问题标题】:Passing a JS variable to a controller in Rails将 JS 变量传递给 Rails 中的控制器
【发布时间】:2015-11-02 07:31:42
【问题描述】:

我发现了这个:Passing javascript variables to rails controller

...我一直在尝试做同样的事情,即

window.open("http://localhost:3000//controller/index?location="+location,"_self")

我的控制器:

class FindMeController < ApplicationController
  def index
    location = params[:location]
    @snake = Snake.where(location: location)
    if @snake.save
        redirect_to root_url
    else
        redirect_to root_url
  end
end

但是,我总是收到“没有路线匹配错误”。我知道这可能很简单,但我还不知道如何解决它。

我尝试将 window.open 行中的“控制器”更改为实际的控制器名称 -“find_me_controller”,但没有奏效。我也尝试省略 localhost,只执行 '/controller...' 但这也无济于事。

谁能解释这个错误意味着什么以及我该如何解决它。

谢谢。

编辑:

好的,我已经在 routes.rb 中添加了这个:

获取“FindMeController/index”,到:“find_me_controller#index”

现在该行 window.open("http://localhost:3000//FindMeController/index?location="+countryLoc+",_self")

...但是现在我有一个新错误:未初始化的常量 FindMeControllerController

另外,rake 路线没有给出:

FindMeController_index GET /FindMeController/index(.:format) find_me_controller#index

EDIT2:

我已经销毁了 find_me 控制器并生成了一个蛇形控制器并复制到旧的索引操作中,但现在有很多以前没有的错误。它为我的控制器显示“home/samuel/Code/VenomApp/VenomRails/app/controllers/snakes_controller.rb:10:语法错误,意外的输入结束,期待keyword_end”:

class SnakesController < ApplicationController
  def index
    location = params[:location]
    @snake = Snake.where(location: location)
    if @snake.save
        redirect_to root_url
    else
        redirect_to root_url
  end
end

我不明白。为什么它会转到我的控制器而不是我的蛇#index 视图???

【问题讨论】:

  • 你能粘贴实际的网址吗?我假设类似:localhost:3000/find_me/index?location="+location", _self
  • 您可以尝试将您的路线重命名为其他名称吗?像在 config/routes.rb 中这样:get 'myfind' => 'find_me#index' 然后尝试以 myfind_path 访问操作
  • 哦!作为观察问题,您控制器的上述代码缺少一个“结束”语句!!! if-else 没有匹配的“结束”!这对于您的编辑都是如此:FindMeController 和您的 SnakesController :)
  • 啊,我注意到了。我尝试这样做的原因是因为我想使用 JS 认为它会更容易,但似乎有一些宝石可以让地理定位变得容易,所以我会研究它们,这种方法似乎更尴尬 - 非常感谢不过你的帮助。

标签: javascript ruby-on-rails controller routes


【解决方案1】:

【讨论】:

  • 我只是犯了一个语法错误,阻止了它做任何事情。原来的问题依然存在。
【解决方案2】:

在控制台上尝试 rake 路由并找出 FindMecontroller 的索引操作的路由并替换该路由,即

window.open("" + "/" + "你的变量")

【讨论】:

  • 您需要在您的 routes.rb 文件中添加资源。根据 rails 命名约定,您的控制器名称应该是 SnakesController,并且在您的 routes.rb 文件中您需要添加资源 :snakes,然后您将获得 snakes_path 作为索引操作的路径
  • 所以我应该移除我的 find_me 控制器并制作一个新的 SnakesController?
  • 得到索引动作的路径了吗?
  • ? rake routes 给出了这个: FindMeController_index GET /FindMeController/index(.:format) find_me_controller#index 但我不确定你的意思。不就是FindMeController/index,因为我把它放在路由里,rb
  • 我在 routes.rb 中添加了 'resources :snakes' 但我认为这对我没有帮助,因为我的控制器称为 findme?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多