0

アクションをオーバーライドして他のモデルをビューに表示したいので、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は次のようになります:

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 => '/'

root-page には alchemy の 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 が初期化されていないため、私のコントローラーがこれをレンダリングするために使用されなかったことを意味します。私は何か間違ったことをしていますか?

Edit2 : 多分私は完全に間違った方向に進んでいます。データベース (カスタム モデル) からのものをレンダリングする Alchemy-Element が必要です。私がしたことは、@some_values をレンダリングする要素を作成することです。そして、この要素を配置できるすべてのページ タイプにカスタム コントローラーを指定することで、編集者が @some_values を必要な場所に配置できるようにします。

4

1 に答える 1