Ruby
Rails

Railsで開発環境用の静的ページディレクトリを作る

やりたいこと

  • デザイン担当の人がControllerとかroutes.rbに触らずに静的ページを置くだけでいい状態に持っていく。
  • viewに一覧マップ的なものを置く

やり方

routesの設定

config/routes.rb
  if Rails.env.development?
    get 'design/:filename', to: 'design#render_file', as: :designs
  end

Controllerの設定

app/controllers/design_controller.rb
class DesignController < ActionController::Base
  layout '{レイアウト名}'

  def action_names
    Dir.entries("app/views/design").map{|f|/\A(?!_)(\w+)\./=~f;$1}.reject(&:blank?)
  end

  def render_file
   render params[:filename]
   rescue => e
    head 404
  end

  helper_method :action_names
end

これでapp/view/design下にファイルを置くだけでアクセスできるようになります。

view

以下のようにするとマップを表示できます。

app/view/design/hoge.html.erb
  <% action_names.each do |action_name| %>
  <%= link_to action_name,designs_path(action_name) %> <br/>
  <% end %>
app/view/design/hoge.html.slim
 - action_names.each do |action_name|
    = link_to action_name,designs_path(action_name)
    br

書き終わってから気がつきましたがgemがあったようです。やってしまった。
thoughtbot/high_voltage

ただhigh_voltageだとデフォルトでApplicationController継承するっぽいので、
そこらへんの処理すっ飛ばしたりとか融通効かせるのが簡単かもしれないです。(特に試してはいないです。)
上のコードだとActionController::Base継承してるので適宜変更してください。