ruby-on-rails Rails -传递局部变量的问题

jm81lzqq  于 2023-06-25  发布在  Ruby
关注(0)|答案(2)|浏览(159)

我正在运行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文档中的布局和渲染,但我不知道为什么这些说明在我的项目上不起作用。
先谢谢你了!

hi3rlvi2

hi3rlvi21#

Rails的方法是为单个记录创建一个分部:

# app/views/tags/_tag.html.erb
<div>
  <div class="d-flex">
    <p><%= tag.id %></p>
    <p><%= tag.name %></p>
  </div>
  <p>tag.taggings.count</p>
</div>

然后你可以将集合传递给render,Rails将查找partial并为集合中的每个成员呈现它:

<%= render @tags %>

这是以下内容的简称:

<%= render partial: 'tag', collection: @tags %>

请参见渲染集合。

kyxcudwk

kyxcudwk2#

我也遇到了同样的问题,一个当地人没有出现在局部。下面是我的代码:

<%= render "chats/messages", locals: { chat: @chat } %>

但必须是

<%= render partial: "chats/messages", locals: { chat: @chat } %>

然后它就像预期的那样工作了(局部变量chat在partial中可用)。

相关问题