0

我需要从 Ruby of Rails 的方法进行系统调用,但我希望它保持在同一页面上。现在由于某种原因它不执行,但显示:

Routing Error

No route matches [POST] "/devices/22918"
Try running rake routes for more information on available routes.

这是按钮:

<%= link_to image_tag("/images/glossy_green_button.png"), device , :method => :turnon, :confirm => "Are you sure?" %>

这是方法:

def turnon
@device = Device.find(params[:id])
result = `/perl/toggle.pl @device.infodot on`
end

请让我知道我做错了什么,

谢谢你

D

4

1 回答 1

2

你根本没有method正确使用。您正在使用它来定位action您要执行的控制器(请注意,为了清楚起见,我明确表示操作而不是方法)。控制器中的可用操作由您的文件定义。您routes.rb最终应该阅读或重新阅读

在您的情况下,假设您有一个资源device(我想这就是您所拥有的),您将首先在routes.rb文件中创建一个新操作

resources :devices do
  put :turnon, on: :member
end

您可以在此处阅读有关此语法的文档,但基本上我turnon通过HTTP PUT method每个设备上的 提供该操作,这意味着它可以通过 URL/devices/1/turnon或通过url_helper: turnon_device_path(或turnon_device_url)

我假设您的开启操作将修改现有事物,而不是创建新事物,这就是我使用PUT动词的原因

然后链接将类似于:

<%= link_to image_tag("/images/glossy_green_button.png"), turnon_device_path(device) , :method => :put, :confirm => "Are you sure?" %>

看到方法就是我新建的路由对应的HTTP方法。

我还假设您将该turnon方法放在DevicesController.

最后,当您想在 ajax 中执行此操作时,您可以查看remote: true 选项

于 2012-10-31T00:57:32.210 回答