我需要从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
答案 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_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
option