Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中集成javascript应用程序的最佳方法_Ruby On Rails_Ruby On Rails 3_Html - Fatal编程技术网

Ruby on rails 在rails中集成javascript应用程序的最佳方法

Ruby on rails 在rails中集成javascript应用程序的最佳方法,ruby-on-rails,ruby-on-rails-3,html,Ruby On Rails,Ruby On Rails 3,Html,我的项目是用Rails制作一个html5游戏网站 我有一个名为games\u controller的控制器,我想将我的游戏的/games/名称与每个html5游戏进行匹配。我创建了一条路线,与游戏控制器功能相匹配,但我的问题是: 我希望我的html5游戏一切都是“即插即用”,我的意思是用Rails开发它们,然后在我的应用程序中复制/粘贴它,一切都很好(引用图像、.js文件等等)。但我也希望我的游戏视图在我的应用程序布局中。以下是我尝试过的: 将它放在/public目录中,并在my games\

我的项目是用Rails制作一个html5游戏网站

我有一个名为
games\u controller
的控制器,我想将我的游戏的/games/名称与每个html5游戏进行匹配。我创建了一条路线,与游戏控制器功能相匹配,但我的问题是:

我希望我的html5游戏一切都是“即插即用”,我的意思是用Rails开发它们,然后在我的应用程序中复制/粘贴它,一切都很好(引用图像、.js文件等等)。但我也希望我的游戏视图在我的应用程序布局中。以下是我尝试过的:

  • 将它放在/public目录中,并在my games\u controller的
    show
    方法中执行
    render”/public/path\u到我的游戏“
    。这会中断所有引用,如
    ,因为url不是*/path\u to\u my\u game*而是/games/name of my game

  • 将它放在/public目录中,但在我的
    show
    方法中使用
    重定向到
    。引用没有被破坏,但是布局消失了(我可能错了,但是布局被控制器卡住了,而不是静态文件)

  • 把它放到app/views/games中,但这看起来很难看,所以我很快停了下来:)


有人有想法吗?

如果你有类似的想法

# 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/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 %>
因为我确信每个游戏都会有不同数量的依赖项,它们的初始化也会不同,所以您可以相应地为每个游戏构建视图,并提供与每个游戏相关的任何资产



要获得更多关于布局和渲染的帮助,请参阅rails指南:

如果您仅将rails用作基本布局包装器和路由器,我强烈建议您退出。如果您尝试放入app\assets\javascripts并使用javascript\u include\u标记?macek:老实说,我已经制作了此网站的一部分,因此,我现在将坚持使用rails(我想学习技术^^^)AntarrByrd:作为我对macek帖子的评论,我希望尽可能避免分割我的游戏逻辑(一些文件在一个文件夹中,一些文件在另一个文件夹中…。感谢您的完整回答:)。我会尽快尝试,即使这不是我想要的100%。它不适合“即插即用”部分,因为我必须创建一个.html.erb文件(仅限rails),并且必须在assets/js中拆分.js,在assets/stylesheet中拆分.css,。。。把所有的东西都放在公共场所对我来说很好,因为这就像把所有的东西都放在一个街区里。没有使用/public目录的解决方案吗?这种方法有什么不好的地方吗?
# 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 %>
# 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 %>