2016-08-15 21 views
0

私は最近、Railsを取り上げて、古いプロジェクトを改善しようとしています。API Railsで検索検索入力

私はSteampowered API呼び出しを扱う宝石使用している - それは自動ように、私は、Active Directoryのレコードに追加して、それを修正https://github.com/Olgagr/steam-web-api

を私は

<% if current_user %> 
    <% player = SteamWebApi::Player.new(current_user.player_steam_id) %> 
    <% data = player.owned_games(include_appinfo: true) %> 
    <% game = data.games %> 
     <% game.each do |f| %> 
     <%= f['playtime_2weeks'] %> 
      <% if f['img_icon_url'].empty? %> 
       <img src='http://www.readyicons.com/IconSets/Sky_Light_(Basic)/32x32-no.png'> 
      <% else %> 
       <img src='http://media.steampowered.com/steamcommunity/public/images/apps/<%= f['appid'] %>/<%= f['img_icon_url'] %>.jpg'> 
      <% end %> 
     <%= f['name'] %><br> 
    <% end %> 
<% end %> 

でそれをレンダリングしていますユーザーカテゴリのフィールドにデータを入力します。

本質的に私はそれの隣に同じことをしようとしていますが、検索します。 "current_user.player_steam_id"は特定のクエリリターンに置き換えられます。

私はそれを働かせることができたとしても、バットをオフにしました(私は働いていたJSスワップを使うことに頼っていましたが、それはうまくいくはずです)私は文字通り同じ互いに隣り合うコードブロックに分割する。

私はこの時点でform_helperを使用してこれをフォームに配置してレンダリングすると思いますが、どうやって動的にレンダリングしますか? Active:Directory:RoRチュートリアルをたくさん読んでいましたが、私は作成フィールドを作成するために使っていましたが、動的セクションにする方法は不明です。

小さな例です。検索後

| Section 1 |  Section 2 | Section 3| 
|CurrentUsersGames|Steam# To Search? | TBD | 
|CurrentUsersGames| [Input Field] | TBD | 
|CurrentUsersGames|     | TBD | 
|CurrentUsersGames|     | TBD | 
|CurrentUsersGames|     | TBD | 
|CurrentUsersGames|     | TBD | 
|CurrentUsersGames|     | TBD | 

::前

| Section 1 |  Section 2 | Section 3| 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 
|CurrentUsersGames|SearchedUsersGames| TBD | 

は、任意の提案をお願い申し上げます。ありがとう。 (current_user%>がログインしていないと、それが中断しない場合は<%)

編集: 'before'と 'after'の説明が追加されました。基本的に私は中間divを検索フィールドからAPIレスポンスの結果に移動しようとしています。

+0

「form_helperを使用してフォームに入れてレンダリングしますが、どうやって動的にレンダリングするのですか?この試みがどのように見えるか教えてください。あなたが実際に望んでいるものを理解することは本当に難しいと思っています。そうすることで、実際に必要なものを理解するのに役立ちます。特に、どのように動的にレンダリングするのですか? - すべてのコードは動的で、この文脈では単語があいまいです...どの部分が動的ではありませんか?それが静的であればどのように見えるのかを見せてもらえますか?また、動的なときに何をしたいのか教えてください。 –

+0

洞察に感謝@TarynEast - 前に追加しました。後で、私のグラフは混乱していたと思う。私のグラフは、私が最終製品として手に入れようとしているものです。検索で「SteamID」をハードコーディングすることでそれを実現することができますが、もう一度 - 文字通り、全く同じコードブロックを2つ持っています。 – DNorthrup

+0

あなたがやっていることは、ビュー内のコードの重複を減らすことだとすれば、それは部分的なものです。部分的に任意の動的変数を受け入れるようにして、ローカル変数として渡します。次に、部分を2回呼び出します( 'current_user.player_steam_id'で1回、検索結果で1回)。 –

答えて

1

主にビュー内でコードをデデュープした後であれば、おそらくあなたが望むのは部分テンプレートです。

ここにあなたが元のテンプレートを持っていると思います何の例です:

<% if user_logged_in? %> 
    <% player = SteamWebApi::Player.new(current_user.player_steam_id) 
    owned_games = player.owned_games(include_appinfo: true).game 
    search_games = player.your_game_search_here %> 

<%= render :partial => 'game_list', :locals => {:games => owned_games, :header => "Games owned by #{player.name}"} %> 
<%= render :partial => 'game_list', :locals => {:games => search_games, :header => "Filtered Game search list title here"} %> 

<% end %> 

、ここではあなたの部分に行くものだ(この例では_game_list.html.erbに名前を付けたいもの)

<h1><%= header %></h1> 
<% games.each do |game| %> 
    <%= game['playtime_2weeks'] %> 
    <% if game['img_icon_url'].blank? %> 
    <%= image_tag 'http://www.readyicons.com/IconSets/Sky_Light_(Basic)/32x32-no.png' %> 
    <% else %> 
    <%= image_tag "http://media.steampowered.com/steamcommunity/public/images/apps/#{game['appid']}/#{game['img_icon_url']}.jpg" %> 
    <% end %> 
    <%= game['name'] %><br> 
<% end %> 
+1

ああ、それは本当にクールです。私はオリジナルのユーザービューに似たようなことをしましたが、パーシャルが別のファイルに作成されているかどうかは分かりませんでした。 ありがとうございました!大変感謝しています。 ランダム追加:これは良い方法ですか - 「ベストプラクティス」と同じですか?私はいつHelpers対Partials vs Formsなどを使用するのか分かりません... – DNorthrup

+0

私は、私の意見をデ・ドゥープアップするためにパーシャルを常に使用しています - それは最高のものです:) –

+0

私はそれをちょっと変えました。私が必要としていることを理解するのに非常に役立ちました(私は誤って説明したかもしれませんが、ELSEのゲームの検索フィールドを作ろうとしていたので、SteamIDに入れたフィールドを検索します)。 しかし、コードの変更はほとんどありませんが、問題があります。 '%player = SteamWebApi :: Player.new(:steamId) owned_games = player.owned_games(include_appinfo:true)%>' あなたの構造に従って、 ':steamId => #########しかしそれはそれを表現していません。私はそれがどのように行われているかを示す多数の記事を見たことがありますが、buenoはありませんか? – DNorthrup