Ruby on rails 在rails中集成javascript应用程序的最佳方法
我的项目是用Rails制作一个html5游戏网站 我有一个名为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\
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 %>