2010-12-08 3 views
0

に属性名を次のように私はmeta_searchを使用しています:のRails 3:エイリアシングがmeta_search

# app/controllers/articles_controller.rb 
def index 
    @search = Article.search(params[:search]) 
    @articles = @search.all 
end 

# app/views/articles/index.html.erb 
<%= form_for @search, :url => articles_path, :html => {:method => :get} do |f| %> 
    <%= f.text_field :my_very_long_attribute_name_contains %><br /> 
    <%= f.submit %> 
<% end %> 

予想通りこれは「my_very_long_attribute_name」属性が検索できるようにすることで、動作します。

問題は、クエリ文字列に?search[my_very_long_attribute_name_contains]が表示されることです。より短い名前をこの属性にマップする最良の方法は何ですか?すなわち?search[mvlan_contains]

これは長い属性名を短くしたい場合だけではありませんが、検索のために潜在的に機密性の高い属性の名前を偽装する必要もあります。

私はalias_attributeを見ましたが、meta_searchに属性別名を認識させることができませんでした。

私は何か提案を歓迎します。

+1

自分で使ったことはありませんが、READMEの「カスタム検索方法へのアクセス」のセクションをご覧ください - https://github.com/ernie/meta_search –

+0

ありがとうございます。これは便利ですが、私のアトリビュートのエイリアスを作成することはできません。 – gjb

答えて

1

rspeicherとして提案することができます。カスタム検索方法がパラメータリストに表示されます。

Re:あなたの属性の機密情報あなたのアプリケーションの潜在的な問題を引き起こすビューの属性名を知っている人は、モデルとコントローラのレイヤーでどのようなセキュリティー対策が取られているかを真剣に検討します。

+0

'def mvlan;を追加しました。 my_very_long_attribute_name;私の見解では '<%= f.text_field:mvlan_eq%>'を使用しようとすると「未定義メソッド」が表示されています。私は間違って何をしていますか? – gjb

+0

eqを追加しています。カスタムメソッドを定義するときは、コードでのパラメータの使用方法を制御したいということです。 _eqは追加されていません。リレーションの変更を自分で処理し、そのリレーションをチェインに返すことになっています。 – Ernie

+0

これを行うには 'search_methods'を使うことはできません。これを達成する別の方法がありますか?興味のない場合は、 'alias_attribute:mvlan、:my_very_long_attribute_name'を実行すると、なぜ私のビューに' <%= f.text_field:mvlan_eq%> 'を使用できないのですか? – gjb