我已生成rails 5 api应用程序。但我希望我的应用程序与主页。为此,我生成了一个家庭控制器并添加了视图文件i各自的视图/ home / index.html.erb
但是当我尝试访问它时,我的回答低于响应
开始GET" / home / index"对于127.0.0.1在2016-07-14 11:14:03 +0530 由HomeController处理#index为HTML已完成204无内容 0毫秒
开始GET" /home/index.js"对于127.0.0.1在2016-07-14 11:14:20 +0530由HomeController处理#index为JS已完成204无内容在0ms
但我看不到网页上显示的索引页面内容。
请分享您的想法。
答案 0 :(得分:16)
我在同一条船上,试图做一个Rails 5 API应用程序仍然可以从单个html页面引导(由JS在加载时接管)。从rails source窃取了一个提示,我创建了以下控制器(注意它使用Rails'而不是我的ApplicationController
用于这个单独的非api控制器)
require 'rails/application_controller'
class StaticController < Rails::ApplicationController
def index
render file: Rails.root.join('public', 'index.html')
end
end
并将相应的静态文件(普通.html
,而不是.html.erb
)放在public
文件夹中。我还添加了
get '*other', to: 'static#index'
在routes.rb
的末尾(在我的所有api路由之后),以便为重新加载,深层链接等保留客户端路由。
如果没有在routes.rb
中设置root,Rails将在调用/
时直接从公共服务,否则将在非api路由上命中静态控制器。根据您的使用情况,添加public/index.html
(routes.rb
中没有root)可能就足够了,或者您可以通过使用
StaticController
get '*other', to: redirect('/')
相反,如果你不关心路径保存。
我很想知道其他人是否有更好的建议。
答案 1 :(得分:1)
如果您只需要一个静态HTML页面(带有一些简单的css / js),我认为另一种方法就是编辑index.html
文件夹下的public
页面。
答案 2 :(得分:0)
我必须在app/controllers
目录中创建一个 home控制器:
app/controllers/home_controller.rb
接下来,我在其中添加了以下内容:
require 'rails/application_controller'
class HomeController < Rails::ApplicationController
def index
render file: Rails.root.join('public', 'index.html')
end
end
然后,我在public
目录中创建了一个 index.html 文件:
public/index.html
接下来,我在其中添加了以下内容:
<head>
<title>My API</title>
</head>
<body>
<h1>My API</h1>
<p>Welcome to my API</p>
</body>
注意:您可以根据自己的选择修改index.html文件。
最后,我将路由添加到config/routes.rb
文件中所有已定义路由的下面。
get '*other', to: 'home#index'
注意:请勿将其放在api
命名空间或api/v1
命名空间之内。只需将其放在文件的底部,但放在Rails.application.routes.draw do
块中即可。
您可以重新启动服务器并对其进行测试。
仅此而已。
我希望这会有所帮助