我正在编写一个CMS插件,其中我有两个基本模型 - print("hello")
和Category
。每个模型都与另一个Entry
关系相关。但我无法弄清楚,我应该如何在他们的控制器和路线中指出这一点。例如,我需要在has_and_belongs_to_many
操作中呈现属于特定类别的所有条目。
以下是模型:
categories#show
这是我的class Entry < ApplicationRecord
has_and_belongs_to_many :categories
end
class Category < ApplicationRecord
has_and_belongs_to_many :entries
end
:
categories_controller
并在我的def show
@category = Category.find(params[:id])
@entries = @category.entries.all
end
模板中:
show.html.erb
和我的路线:
<% @entries.each do |entry| %>
<%= link_to entry.title, entry_path(entry) %>
<% end %>
但是每次收到错误时,数据库中都没有resources :categories do
scope '/:content_class' do
resources :entries
end
end
关系。我做错了什么?
答案 0 :(得分:1)
在我查看您提供的github存储库之后,我认为您需要有一个交叉引用表来使关联工作。
这样做的原因是应该有一种方法来区分一个表的哪些记录与另一个表中的哪一个具有连接。对于one-to-many
或has_one
这样的belongs_to
关系,可以通过在其他模型的表格中记录其中一个模型的id
来实现。由于您需要在两个表中的每个记录中记录多个id
,因此只能使用单独的表格。
尝试仅使用两个字段制作此类表格:category_id
和entry_id
,其迁移类似于此代码段:
class CreateCategoryEntryJoinTable < ActiveRecord::Migration
def change
create_table :categories_entries, id: false do |t|
t.integer :category_id
t.integer :entry_id
end
end
end
您可以在此处阅读更多内容:http://apidock.com/rails/v4.2.1/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many
答案 1 :(得分:0)