2016-09-26 3 views
1

私が今持っているすべてのURLに "mobile"を表すURLパラメータ "m"を挿入したいとします。私は今のような他の選択肢を考えていません。"m"パラメータ(モバイル)をレールのウェブサイトに簡単に挿入するには?

それでは、どのように私は簡単かつ安全に現在の機能ダウンを壊すことなく、「M」を挿入ことができますか? routes.rbにセクションを追加するだけですか?もしそうなら、どのように見えますか?

「m」は省略可能ですが、省略されている場合はウェブサイトを通常モードで表示する必要があります。

答えて

1

私はたぶん単純なものを書くでしょうRack Middleware

多分これ

class ParamSanity 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    request = Rack::Request.new(env) 
    request.params["m"] = stands_for_mobile 
    status, headers, body = @app.call(env) 

    [status, headers, body] 
    end 
end 

のようなものは、その後のconfig/application.rb

config.middleware.use ParamSanity 
+0

これはハックだ。より良い、きれいな解決策はありませんか? – Koooomo

+0

ApplicationControllerで 'before_action'を使用するなど、これを実装できる他の多くの方法があります。個人的には、Rackミドルウェアを使用してパラメータをグローバルに追加することはハックです。それはRails自身がそれをする方法です。 –

+0

1)代わりにroutes.rbにルートまたは名前空間を追加するとできませんか? 2)before_actionを介してそれを行う方法、あなたは私を見せてくれますか? – Koooomo

1

にあなたはこの質問 Rails routes with optional scope ":locale"を見てみましょう。この

scope "(:mobile)" do  
    ...your resources 
end 

ような何かを行うことができます

+0

それは壊れません何か? – Koooomo

+0

いいえ、そうではありません。 あなたのルートには2通りの方法でアクセスできます: '/ posts/12' '/m/posts/12' 後者の場合、 'params [:mobile]'という追加パラメータがあります。 – Marat

関連する問題