簡體   English   中英

軌道上的 ruby - has_many 關系上的 NoMethodError - 嘗試創建類別和子類別 model

[英]ruby on rails - NoMethodError on has_many relation - trying to create a categories and subcategories model

我正在開發一個具有類別和子類別的應用程序。 所以我用腳手架創建了兩個模型。

我收到此錯誤

NoMethodError (undefined method `subcategories' for #<Category::ActiveRecord_Relation:0x00007f96e144d458>)

但是關系在 model 上是has_manybelong_to

這是我的模型:

models/category.rb

class Category < ApplicationRecord
  has_many :subcategories
end

models/subcategory.rb

class Subcategory < ApplicationRecord
  belongs_to :category
end

這是 controller

controllers/pages_controller.rb

class PagesController < ApplicationController
  def home
    @categories = Category.all
    @subcategories = @categories&.subcategories || []
  end

  private
    def find_mmy
      @category = Category.find_by(id: params[:category].presence)
      @subcategory = Subcategory.find_by(id: params[:subcategory].presence)
    end
end

並查看views/home.html.erb

<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>

<%= turbo_frame_tag "form" do %>
  <%= form_tag root_path, method: :get, data: { controller: "dropdown", action: "change->dropdown#submit" } do %>
    <%= select_tag :category, options_from_collection_for_select(@categories, "id", "name", @category&.id), prompt: "- Please select -" %>
    <%= select_tag :subcategory, options_from_collection_for_select(@subcategories, "id", "name", @subcategories&.id), prompt: "- Model -" %>
  <% end %>

<% end %>

我還創建了一個名為javascript/controllers/dropdown_controller.js的文件

import { Controller } from "@hotwired/stimulus"

// Connects to data-controller="dropdown"
export default class extends Controller {
  submit() {
    this.element.requestSubmit();
  }
}

對不起,我是初學者,如果我的問題不清楚或遺漏了一些信息,請幫我說得更清楚。 謝謝

@categories是一個集合,因此您不能為其調用subcategories方法。 您需要為每個類別調用subcategories方法,如下所示:

@categories.map(&:subcategories)

這將返回一個 arrays 數組,因此您需要將其flatten 這個數組也可能有重復的記錄,所以你需要調用uniq方法。 並且您不需要將默認值分配為數組,因為它無論如何都會返回數組。 這是答案的最終形式:

@categories.map(&:subcategories).flatten.uniq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM