私は Ruby on Rails を学び始めたばかりで、ページに新しいページを作成するたびにapp/assets/views
、layouts/application
HTML マークアップと<%= yield %>
しかし、別のページ収量 (またはデフォルトのアプリケーション ページ以外の別のレイアウト) のホームページを作成したい場合、そのデフォルトのアプリケーションを通過する必要がないようにするにはどうすればよいでしょうか?
ありがとう!
私は Ruby on Rails を学び始めたばかりで、ページに新しいページを作成するたびにapp/assets/views
、layouts/application
HTML マークアップと<%= yield %>
しかし、別のページ収量 (またはデフォルトのアプリケーション ページ以外の別のレイアウト) のホームページを作成したい場合、そのデフォルトのアプリケーションを通過する必要がないようにするにはどうすればよいでしょうか?
ありがとう!
コントローラーがあり、レイアウトを設定できるとしましょう:
class HomeController < ApplicationController
layout 'my_layout'
end
これにより、コントローラーHomeControllerのすべてのアクションが、デフォルトのレイアウトではなく、レイアウト「app/views/layouts/my_layout.html.erb」をレンダリングするようになります。
次のように、アクションのレイアウトを指定することもできます。
class HomeController < ApplicationController
def index
render layout: 'my_layout'
end
end
または、レイアウトをまったく使用しない場合:
class HomeController < ApplicationController
def index
render layout: false
end
end
レールとレイアウトの詳細については、こちらを参照してください。
これを実現するにはいくつかの方法があります。
コントローラ ワイド
layout
コントローラーでは、メソッドを使用できます
class MyController < ApplicationController
layout :name_of_my_layout
end
これはapp/views/layout/name_of_my_layout.html.erb
、以下のすべてのアクションのレイアウトとして使用されますMyController
layout
レイアウトの名前を返すメソッドを渡すこともできます
class MyController < ApplicationController
layout :random_layout
private
def random_layout
%[layout1 layout2 layout3].sample
end
end
このメソッドは、リクエストごとrandom_layout
にアクションで使用されるレイアウトを決定します。MyController
レンダリングごと
layout
オプションを render 呼び出しに渡すことで、上記のオプションをオーバーライドできます。
class MyController < ApplicationController
layout :name_of_my_layout
def index
...
render layout: false # no layout
end
def new
...
render layout: 'my_super_duper_layout_for_the_new_action'
end
end
命名規則
コントローラーの名前をレイアウトの名前として使用できます。たとえば、投稿コントローラーがある場合、コントローラーでレイアウトを指定していない場合app/views/layouts/posts.html.erb
の代わりに、レールはこれを使用します。app/views/layouts/application.html.erb