【发布时间】:2021-04-02 07:13:05
【问题描述】:
我有两个模型,它们之间没有关联。所以,我生成了一个迁移并添加了一个关联。
class Post < ActiveRecord::Base
has_and_belongs_to_many :workspaces
end
class Workspace < ActiveRecord::Base
has_and_belongs_to_many :posts
end
class CreateJoinTablePostsUsers < ActiveRecord::Migration
def change
create_join_table :posts, :workspaces do |t|
# t.index [:post_id, :workspace_id]
# t.index [:workspace_id, :post_id]
end
end
end
我目前有一个显示所有帖子的页面。但是,我在帖子创建表单中添加了一个多选,以便在创建时选择一个或多个工作区。我希望能够仅显示为该特定工作区创建的帖子,而不是所有帖子,就像目前一样。 我的控制器如下:
class PostsController < Admin::BaseControlle
def index
respond_to do |format|
format.html
format.json do
@posts = Post.all.order(:order)
render json: present_collection(@posts, PostPresenter).map(&:as_json)
end
end
end
private
def post_params
params.require(:post).permit(:label, :url, :active, workspace_ids: [])
end
end
我可以通过这种方式获得相关的工作区:
Post.first.workspaces
但我想显示所有帖子,但在尝试此命令时出现错误:
Post.all.workspaces
如何更改我的控制器并完成它?提前感谢您的帮助!
【问题讨论】:
标签: ruby-on-rails controller has-and-belongs-to-many model-associations