0

私のプロジェクトは、Railsでhtml5ゲームを使ったWebサイトを作成することです。

と呼ばれるコントローラーがあり、/ games/name-of-my-gameを各html5ゲームとgames_controller一致させたいと思います。games_controller関数と一致するルートを作成しましたが、ここに問題があります。

html5ゲームのすべてを「プラグアンドプレイ」にしたいのです。つまり、レール外で開発し、アプリ内にコピーして貼り付けるだけで、すべてが正常に機能します(画像、.jsファイルなどへの参照) )。ただし、ゲームのビューをアプリケーションレイアウト内に配置することも必要です。これが私が試したことです:

  • それを/publicディレクトリに置き、私のgames_controllerのshowメソッドで行いますrender "/public/path_to_my_game"。これにより、のようなすべての参照が壊れます。これは<script type="text/javascript" src="some_script.js"></script>、URLが* /path_to_my_game*ではなく/games/name-of-my-gameであるためです。

  • それを/publicディレクトリに置きますが、代わりredirect_toに私のメソッドに。参照は壊れていませんが、レイアウトはなくなっています(私は間違っているかもしれませんが、レイアウトは静的ファイルではなくコントローラーでスタックしています)。showrender

  • app / views / gamesに入れますが、これは醜いようだったので、すぐに停止しました:)。

誰かアイデアがありますか?

4

1 に答える 1

0

あなたがのようなものを持っているなら

# config/routes.rb
match '/games/:game' => 'games_controller#show'

# app/controllers/games_controller.rb
def show
  @game = params[:game]
end

レイアウトファイルで本当にしなければならないのは

<%= javascript_include_tag @game %>

これは、app/assets/javascripts/<game>.jsゲームごとにファイルがあることを意味します。各ゲームの起動を担当します。

params[:game]明らかに、それが有効なゲームであることを検証するために予防策を講じることができます。


または、レイアウトファイルにコンテンツセクションを作成することもできます

<html>
  <head>
    <%= yield :game %>
  </head>
  <!-- rest of layout ... -->

次に、適切なビューを提供しますGamesController

# app/controllers/games_controller.rb
def show
  @game = params[:game]
  render "games/#{@game}"
rescue ActionView::MissingTemplate
  redirect_to root_path, :alert => "invalid game id"
end

次に、ゲームビューで、各ゲームに必要なすべてのファイルが必要になります。たとえば、ユーザーがアクセスします/games/pacman

# app/views/games/pacman.html.erb
<% content_for :game do %>
  <%= javascript_include_tag 'pacman/foobar' %>
  <%= javascript_include_tag 'pacman/start' %>
  <%= stylesheet_link_tag 'pacman/styles' %>
<% end %>

別の例、ユーザーの訪問/games/time_pilot

# app/views/games/pacman.html.erb
<% content_for :game do %>
  <%= javascript_include_tag 'time_pilot/init' %>
  <%= stylesheet_link_tag 'time_pilot/base' %>
  <%= stylesheet_link_tag 'time_pilot/retro' %>
<% end %>

各ゲームには異なる量の依存関係があり、それらはすべて異なる方法で初期化されると確信しているため、それに応じて各ゲームのビューを構築し、各ゲームに関連するアセットを提供できます。


レイアウトとレンダリングの詳細については、Railsガイド:Railsでのレイアウトとレンダリングを参照してください。

于 2012-12-11T21:08:07.613 に答える