クエリパラメータを渡すには、GETリクエストの場合と同様に、URLの一部としてそれらを配置する必要があります。そのようです:
<%= link_to "Click Here", "/login?username=testuser&password=moojuice", :method => :post %>
または、Railsルートヘルパーを使用している場合
<%= link_to "Click here", login_path(:username => "testuser", :password => "moojuice"), :method => :post %>
ログインしているものと同じRailsアプリケーションでこのリンクを使用するかどうかは、元の質問に基づいて正確にはわかりません。そうでない場合は、もう1つちょっとした落とし穴があります。外部サイトから投稿する場合、ページの読み込み時にRailsが自動的に生成するCSRFトークンが失われるため、Railsはリクエストを無視する可能性が高くなります。これを実現するには、ログインを処理するコントローラーにprotect_from_forgeryメソッド呼び出しを配置する必要があります。/ loginルートがSessionsControllerアクションにマップされていると仮定すると、次のように作成されます。
class SessionsController < ApplicationController
protect_from_forgery :except => [:create] # Need this to ignore CSRF token
def create
# Login logic
end
end
そうは言っても、CSRFトークンを削除すると、アプリケーションの安全性が低下するため、削除することはお勧めしません。次のように、 SessionsControllerに特別なアクションを実装して独自のセッションにログインすることをお勧めします。
class SessionsController < ApplicationController
def create
# Login logic
end
def demo_account
# Logic to create session for demo account
end
end
このようにして、POSTリクエストを実行するリンクを忘れて、 /demo_loginをSessionsControllerの*demo_account*アクションにマップするGETルートを設定することができます。これにより、このリンクをアプリケーション内だけでなく、どこでも使用できるようになります(@allaireが提案した以前のコメント投稿者の1人のような電子メールのように)。ただし、Railsアプリケーションのリンクから機能させたい場合は、CSRFトークンに関する私の回答の一部を無視してください。