0

Rails の Ruby のメソッドからシステムコールを行う必要がありますが、同じページに留まりたいです。現在、何らかの理由で実行されませんが、次のように表示されます。

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 に答える