Rails 5 api仅适用于主页

时间:2016-07-14 05:57:43

标签: api ruby-on-rails-5

我已生成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

但我看不到网页上显示的索引页面内容。

请分享您的想法。

3 个答案:

答案 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.htmlroutes.rb中没有root)可能就足够了,或者您可以通过使用

来实现类似的事情而不会出现奇怪的StaticController
get '*other', to: redirect('/')
相反,如果你不关心路径保存。

我很想知道其他人是否有更好的建议。

答案 1 :(得分:1)

如果您只需要一个静态HTML页面(带有一些简单的css / js),我认为另一种方法就是编辑index.html文件夹下的public页面。

答案 2 :(得分:0)

只需添加到Risto Keravuori's answer

我必须在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块中即可。

您可以重新启动服务器并对其进行测试。

仅此而已。

我希望这会有所帮助