我正在运行Rails 6.0.3.2,我想呈现一个局部变量传递给另一个控制器视图的部分:
我的路线:
Rails.application.routes.draw do
devise_for :users
root to: 'notebooks#index'
resources :notebooks, only: [:index, :new, :show, :create, :edit, :update, :destroy] do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
collection do
get "list"
end
end
resources :tags
end
笔记本型号:
class Notebook < ApplicationRecord
has_one_attached :photo
validates :asin, presence: true, uniqueness: true
after_initialize :init
acts_as_list column: :position, add_new_at: :bottom
has_many :taggings
has_many :tags, through: :taggings
def init
self.edited ||= false
end
end
标签模型
class Tag < ApplicationRecord
has_many :taggings
has_many :notebooks, through: :taggings
end
在标记控制器中:
def index
@tags = Tag.all.order(created_at: :asc)
end
我试着按照这个指南,在“列表视图”上从标签控制器渲染“索引视图”。应用程序找到tags/_index.html文件,但返回错误undefined method `each' for nil:NilClass。下载我的视图代码:
在app/views/notebooks/list.html.erb中:
<%= render :partial => "tags/index" , locals: {tags: @tags}%>
在app/views/tags/_index.html.erb中
<% tags.each do |tag| %>
<div>
<div class="d-flex">
<p><%= tag.id %></p>
<p><%= tag.name %></p>
</div>
<p>tag.taggings.count</p>
</div>
<% end %>
谁能告诉我哪里做错了?我阅读了Rails文档中的布局和渲染,但我不知道为什么这些说明在我的项目上不起作用。
先谢谢你了!
2条答案
按热度按时间hi3rlvi21#
Rails的方法是为单个记录创建一个分部:
然后你可以将集合传递给render,Rails将查找partial并为集合中的每个成员呈现它:
这是以下内容的简称:
请参见渲染集合。
kyxcudwk2#
我也遇到了同样的问题,一个当地人没有出现在局部。下面是我的代码:
但必须是
然后它就像预期的那样工作了(局部变量
chat
在partial中可用)。