2010-12-20 4 views
61

私は私のRails 3アプリケーションを簡単な検索フォームを持っているhttp://myapp.com/search?utf8=%E2%9C%93&q=foobar%E2%9C%93がチェックマークとして表示されます:✓)。削除「UTF8 =✓」レールから3つのフォームの提出

私はutf8パラメータで何もしていませんので、完全に削除してURLをきれいにしておきたいと思います。つまり、代わりにユーザーにURL:http://myapp.com/search?q=foobarが届くようにしたいと考えています。

どうすればよいですか?

+3

ので、あなたは最終的に何をしましたか?ちょうどそれを残す? – Ayrton

+3

shingaraの回答はhttp://stackoverflow.com/questions/4104474/で動作します。単に '<%= form_tag%> ... <% end %>'ではなく '

...
'を使用してください。 http://stackoverflow.com/questions/3222013/に説明されているように、送信されたコンテンツが決してデータベースに保存されない場合にのみ、これを行う必要があります。 – AlexC

+2

標準に準拠していない単一のブラウザの回避策を使用しているユーザーに迷惑をかけたくないので、非常に関連性の高い質問です。私は私が持っている少数のIEユーザーのために、この "utf8 =✓"だけを必要とします。 – Jarl

答えて

24

あなたはパラメータで何もしていないにもかかわらず、Railsがあります。 IEのパラメータエンコーディングでいくつかの問題を修正することです。私がGETリクエストからのparamを削除するために初期化を行った

What is the _snowman param in Ruby on Rails 3 forms for?

+1

IEのパラメータエンコーディングでこれらの問題を修正する方法はありますか? – grautur

+0

私が知っているわけではありません。 – cdmwebs

0

あなたのApplicationControllerにでこれを試してみてください:

def default_url_options(options={}) 
    options.delete('utf8') 
end 
+0

これは動作しません。そのメソッドはハッシュを返さなければならず、例えば、 'nil'。しかし、 '{utf8:nil}'のようなものを返すように変更すると、望みの効果が得られません。 –

5

:イェフダは、ここに詳細情報を持っています。それは明らかにハックです。

これはconfig/initializers/overrides.rbに行く:それはパッチにあまり厄介ですので、理想的には

# Don't let Rails add a utf8=✓ param to GET forms. 
# See http://stackoverflow.com/questions/3222013/what-is-the-snowman-param-in-rails-3-forms-for for details. 
module ActionView::Helpers::FormTagHelper 
private 

    def extra_tags_for_form_with_utf8_param_excluded_from_gets(html_options) 
    old = extra_tags_for_form_without_utf8_param_excluded_from_gets(html_options) 
    non_get = old.include?('"_method"') || old.include?('"'+request_forgery_protection_token.to_s+'"') 
    if non_get 
     old 
    else 
     old.sub(/<[^>]+name="utf8"[^>]+"&#x2713;"[^>]*>/, '').html_safe 
    end 
    end 

    alias_method_chain :extra_tags_for_form, :utf8_param_excluded_from_gets 

end 

は、Railsのは、おそらく、このための設定、または少なくとも書き換えextra_tags_for_formを持っている必要があります。

+0

Rails 3.2で動作するように上記のコードを更新しました。 –

10

utf8パラメータを非標準準拠のブラウザ(またはそのための他のロジック)にのみ適用するための宝石(utf8_enforcer_workaround)があります。これは、IEの回避策を使ってうまく動作しているユーザーを気にしたくない場合に便利です。

38

だけform_tagヘルパーは使用しないでください...あなたがthe purpose of the Rails UTF-8 paramを理解し、あなたはまだそれを削除する必要があるいくつかの理由のために、解決策は、あなたが思ったより簡単です一度:

<form action="<%= search_path %>" method="get"> 
    <%= text_field_tag :q, params[:q] %> 
    <%= submit_tag "search", :name => nil %> 
</form> 
+0

これは、submit_tagの設定に役立ちました。ありがとうございました! – Ikon

+0

しかし、 'form_tag'ヘルパーはいくつかの他の機能を持っています! –

1

は私のために働きました。 たとえば、投稿を検索する場合は、コレクションの検索ルートを設定します。

resources :posts do 
    collection do 
    get 'search' 
    end 
end 

投稿とインデックスアクションをHTTPでGETします。

<%= form_tag posts_path, method: :get do %> 
    <%= search_field_tag :q, params[:q], placeholder: "Search posts" %> 
    <%= submit_tag "Go" %> 
<% end %> 

、その後

before_action :check_for_query, only: :index 

    ... 


private 
    def check_for_query 
    redirect_to articles_search_url(q: params[:q]) if params[:q].present? 
    end 

、PostsControllerの中やポスト番号検索アクションでPost.searchを呼び出し、インデックスページをレンダリングします。

def search 
    Post.search(params[:q]) 
    render :index 
end 

URLは/投稿/検索のように見えるのでしょうか?Q = fooの

+1

間違った間違った – Peter

関連する問題