Rails 5 api 唯一有主页的应用程序
Rails 5 api only app with home page
我已经生成了一个 rails 5 api 应用程序。但我想要我的应用程序有主页。为此,我生成了一个家庭控制器并添加了相应的视图文件 views/home/index.html.erb
但是当我尝试访问它时,我得到的响应低于响应
Started GET "/home/index" for 127.0.0.1 at 2016-07-14 11:14:03 +0530
Processing by HomeController#index as HTML Completed 204 No Content in
0ms
Started GET "/home/index.js" for 127.0.0.1 at 2016-07-14 11:14:20
+0530 Processing by HomeController#index as JS Completed 204 No Content in 0ms
但是我在网页上看不到索引页内容。
请分享您的想法。
我在同一条船上,试图做一个 Rails 5 API 仍然可以从单个 html 页面(被 JS 接管)bootstrap 的应用程序负载)。从 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 将直接从 public 调用 /
并在非 api 上调用静态控制器] 否则路由。根据您的用例,添加 public/index.html
(在 routes.rb
中没有根)可能就足够了,或者您可以通过使用
在没有奇怪的 StaticController
的情况下实现类似的事情
get '*other', to: redirect('/')
相反,如果您不关心路径保留。
我很想知道是否还有其他人有更好的建议。
如果您只需要一个静态 HTML 页面(带有一些简单的 css/js),我认为另一种方法是编辑 [=11= 下的 index.html
页面]文件夹。
只是添加到
我必须在 app/controllers
目录中创建一个 家庭控制器:
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
块内即可。
您可以重新启动服务器并进行测试。
就这些了。
希望对您有所帮助
我已经生成了一个 rails 5 api 应用程序。但我想要我的应用程序有主页。为此,我生成了一个家庭控制器并添加了相应的视图文件 views/home/index.html.erb
但是当我尝试访问它时,我得到的响应低于响应
Started GET "/home/index" for 127.0.0.1 at 2016-07-14 11:14:03 +0530 Processing by HomeController#index as HTML Completed 204 No Content in 0ms
Started GET "/home/index.js" for 127.0.0.1 at 2016-07-14 11:14:20 +0530 Processing by HomeController#index as JS Completed 204 No Content in 0ms
但是我在网页上看不到索引页内容。
请分享您的想法。
我在同一条船上,试图做一个 Rails 5 API 仍然可以从单个 html 页面(被 JS 接管)bootstrap 的应用程序负载)。从 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 将直接从 public 调用 /
并在非 api 上调用静态控制器] 否则路由。根据您的用例,添加 public/index.html
(在 routes.rb
中没有根)可能就足够了,或者您可以通过使用
StaticController
的情况下实现类似的事情
get '*other', to: redirect('/')
相反,如果您不关心路径保留。
我很想知道是否还有其他人有更好的建议。
如果您只需要一个静态 HTML 页面(带有一些简单的 css/js),我认为另一种方法是编辑 [=11= 下的 index.html
页面]文件夹。
只是添加到
我必须在 app/controllers
目录中创建一个 家庭控制器:
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
块内即可。
您可以重新启动服务器并进行测试。
就这些了。
希望对您有所帮助