我想爲page_layout設置自己的控制器,因爲我想重寫將其他模型放入視圖的操作。如何爲page_layout設置自定義控制器
編輯:現在前端渲染工作。只有後端是越野車
從文檔,我所做的:
# config/alchemy/page_layouts.yml
- name: index
unique: true
elements: [article, other_element]
autogenerate: [article]
controller: 'my_custom'
action: 'index'
,並創造了app/controllers/my_custom_controller.rb
:
# app/controllers/my_custom_controller.rb
class MyCustomController < Alchemy::PagesController
def index
@some_values = Value.all
end
end
我的routes.rb lookes這樣的:
Rails.application.routes.draw do
root 'my_custom#index'
devise_for :users,
path_names: { sign_in: 'login', sign_out: 'logout' },
controllers: { sessions: 'users/sessions', passwords: 'users/passwords' }
mount Alchemy::Engine => '/'
的根頁面在鍊金術中具有page_type索引。
當我去到localhost:3000
我得到了我想要
但在煉丹後臺,編輯頁面的時候,我在渲染時出現錯誤:
NoMethodError in Alchemy::Admin::Pages#show
Showing app/views/alchemy/elements/_some_element_view.html.erb where line #2 raised:
undefined method `each' for nil:NilClass
Extracted source (around line #2):
<div class="row">
<% for @value in @some_values %>
<%= render 'value/basic_view' %>
<% end %>
</div>
可能的,因爲@some_values沒有初始化,這意味着,我的控制器不用於渲染。 我做錯了什麼?
編輯2:也許我在完全錯誤的軌道上。我想要一個鍊金術元素,它呈現數據庫中的東西(自定義模型)。我所做的是創建一個元素,呈現@some_values。通過在每個可以放置此元素的頁面類型上指定自定義控制器,我允許編輯將這些@some_values放在他們想要的位置。
謝謝,這工作就像一個魅力。 有沒有一種首選的方法來獲取數據,使用on_page_layout或從性能點(或其他點)的視圖中提取? – marges
真的沒關係。雖然視圖被緩存,但要注意,每次更新數據記錄時都需要更新元素。在您的控制器中添加一個有效時間爲10分鐘或甚至一小時的緩存更加容易。這真的取決於你想要什麼。我建議使用控制器回調。 – tvdeyen