2012-10-31 28 views
0

我需要從Rails的Ruby的方法進行系統調用,但我希望它保持在同一頁面上。 現在由於某種原因,它不執行,但顯示:來自方法的系統調用(ruby on 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

如果你希望用戶停留在同一頁面上,你不應該使用AJAX? link_to向您的rails應用程序發送信號,指出您想要用戶訪問的新頁面。 – Josh

回答

2

您根本沒有正確使用method。您正在使用它來定位您想要執行的控制器的action(請注意,我明確表示採取了行動,而不是清晰的方法)。在控制器 可用的操作是由您routes.rb file.You定義最終應該讀或讀重新that

在你的情況,假設你有一個資源device(我想這是你所擁有的),你會先在routes.rb文件

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

創建一個新的動作你可以閱讀文檔有關此語法here但基本上我通過HTTP PUT method各設備上進行操作turnon可用的,這意味着它會通過URL訪問/devices/1/turnon或通過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

最後,你想要做的是,在阿賈克斯,你可以有一個看起來的remote: trueoption

+0

不需要欄後放我猜,謝謝,它似乎更接近工作,但它由於某種原因加載5分鐘。然後'Template is missing Missing template devices/turnon,application/turnon with {:locale => [:en],::formats => [:html],:handlers => [:erb,:builder,:coffee ]}。搜索:*「/ var/www/ruby​​/reservation/app/views」 –

+0

剛剛注意到我犯了一個錯字:'put:turnon,on::member' not'put:' – pjam

+0

這是合乎邏輯的,動作嘗試渲染一個視圖,如果你正在調用json,你可以'render json:@ device',如果你在'device'中加載當前'device'當然是 – pjam