方法的系统调用(ruby on rails)

时间:2012-10-31 00:39:32

标签: ruby-on-rails methods system call

我需要从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

1 个答案:

答案 0 :(得分:2)

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

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

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

您可以阅读有关此语法的文档here,但基本上我正在通过每个设备上的turnon提供操作HTTP PUT method,这意味着可以通过网址访问/devices/1/turnon {1}}或通过url_helperturnon_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 option