-->

如何做到在Rails的静态内容?(How to do static content in Rails

2019-06-17 10:23发布

看着不同的选项:

一是只把公共/文件夹中的静态页面,但我想从布局/应用程序的标题是一致的。

我想这一点,但我得到了一个错误:

# in routes.rb:
map.connect '*path', :controller => 'content', :action => 'show'

# in content_controller.rb:
def show
  render :action => params[:path].join('/')
end

我想要的是放在一起就像我的常见问题解答,联系方式,服务条款,隐私,以及其他非应用型的网页通过刚刚创建的.rhtml地方容易的事情的简单方法。 谁做呢?

Answer 1:

thoughtbot具有用于显示静态内容的一个插件叫做high_voltage: https://github.com/thoughtbot/high_voltage



Answer 2:

对于Rails5Rails4你可以做到以下几点:

把线下在你的routes.rb结束

  get ':action' => 'static#:action'

然后请求根/欢迎 ,将使/app/views/static/welcome.html.erb。

不要忘记创建一个“静态”的控制器,即使你没有把任何东西在里面。

对于Rails3中 ,你必须使用“比赛”,而不是“得到”

  match ':action' => 'static#:action'


Answer 3:

依赖于URL结构,如果你想要的路径来关闭/(例如/ about_us),则:

map.connect ':action', :controller => "static"

这应该在你的路由文件的最后,要把你的.html.erb文件到应用程序/视图/静态和你做。

例如:在投掷about_us.html.erb ,将使你在/ about_us的页面。

你在你的问题的项目有一个美中不足的是伟大的所有路线,你可以分析在给你的阵列params[:path] 。 在对更多的信息http://railscasts.com/episodes/46-catch-all-route



Answer 4:

渲染动作没有任何意义。 你要渲染布局模板(或文件)。

# Path relative to app/views with controller's layout
render :template => params[:path]

# ... OR

# Absolute path. You need to be explicit about rendering with a layout
render :file => params[:path], :layout => true

你可以从页面缓存一个动作提供各种不同的模板。

# app/controllers/static_controller.rb
class StaticController < ApplicationController
  layout 'static'

  caches_page :show

  def show
    valid = %w(static1 static2 static3)
    if valid.include?(params[:path])
      render :template => File.join('static', params[:path])
    else
      render :file   => File.join(Rails.root, 'public', '404.html'), 
             :status => 404
    end
  end
end

最后,我们需要定义一个路由。

# config/routes.rb
map.connect 'static/:path', :controller => 'static', :action => 'show'

尝试访问这些静态页面。 如果路径不包括有效的模板,我们将呈现404文件,并返回404个状态。

  • http://localhost:3000/static/static1
  • http://localhost:3000/static/static3
  • http://localhost:3000/static/static2

如果您在app /公共看一看,你会发现有static1.html,static2.html和static3.html静态/目录。 访问该页面的第一次后,任何后续请求将完全静态的感谢页面缓存。



Answer 5:

考虑到如果u有喜欢秀夫妇方法1个家庭控制器,关于我们,隐私:

class HomesController < ApplicationController
  def show
  end
  def privacy
  end
  def aboutus
  end
end

并且展示方法映射到你的根,而其他映射到像一些命名路由

map.root      :controller => "homes", :action => "show"
map.aboutus "/aboutus", :controller => "homes", :action => "aboutus"
map.privacy "/privacy", :controller => "homes", :action => "privacy"

并与查看每个

app/views/homes/aboutus.html.erb --> you get http://localhost:3000/aboutus
app/views/homes/show.html.erb --> you get http://localhost:3000 (root)
app/views/homes/privacy.html.erb --> you get http://localhost:3000/privacy

所有使用的app /视图/布局/ application.html.erb相同的布局



Answer 6:

Lindsaar解决方案是我见过的最好的一个。 他建立的git时改变修订已逾期的高速缓存静态页面。

<%= cache "site-page-#{@page_name}-#{App.git_revision}" do %>
  <%= render :partial => @page_name %>
<% end %>


Answer 7:

为您的静态页面(如触点),并插入创建PagesController

def contact_page
end

在配置/ routes.rb中插入

get 'contact' => 'pages#contact_page'

这将显示从视图/页/ contact_page.html.erb内容



文章来源: How to do static content in Rails?