[英]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_many
和belong_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.