嵌套路线和CRUD操作与其他值在Rails的assciation(Nested routes and

2019-10-24 09:55发布

我通过导轨API创建关系一个的has_many。 我还使用了嵌套的路线。

我的模型,如以下;

class Author < ActiveRecord::Base
 has_many :comments
 has_many :posts, :through => :comments
end

class Post < ActiveRecord::Base
 has_many :comments
 has_many :authors, :through => :comments
end

class Comment < ActiveRecord::Base
 belongs_to :author
 belongs_to :post
end

我的路线如下图所示;

Rails.application.routes.draw do
 namespace :api, defaults: { :format => 'json' } do
  resources :posts do
   resources :comments
  end
  resources :authors
 end
end

所以在这里我的目标是

  1. 评论是嵌套的路线,这样我可以创建并显示发表评论
  2. 这里没有任何帖子作者。 笔者是为业主意见

我实现的概念,几乎所有的工作。 但我面临着以下两个问题有关联

  1. 如何添加额外的字段关联表时,父创建。 在这里我的要求是创建一个职位时,我需要插入的评论一个默认入口。 我的帖子控制器实施创建像下面
 def create params = create_params.merge(:record_status => 1) @post = Post.new(params) @post.authors << Author.find(1) if @post.save render :show, status: :created end end def show @post = Post.find(params[:id]) end private def create_params params.permit(:name, :description, :author_id ) end 

这里我传递AUTHOR_ID在请求JSON。 这需要添加为comments表作者ID。 现在我只是硬编码为1。我用“<<”为关联条目。 这是工作,但我还需要包括两个字段分别是:意见和:record_status。 还是那句话:评论是请求本身。

注意:这不是轨道MVC应用程序。 这是轨道API和输入作为JSON。

  1. 当我使用嵌套的路线显示评论我需要显示的作者,也从意见表评论。 我的评论控制方法;
 class Api::CommentsController < ApplicationController before_filter :fetch_post def index @authors = @post.authors.where(:record_status => 1, comments: { record_status: 1 }) end private def fetch_post @post = Post.find(params[:post_id]) end end 

在这里,我得到了作家,但不是在连接表“意见”正确意见

请帮我解决这些问题

Answer 1:

对于第一个问题,你想要的配置posts_controller接受意见的嵌套属性。 在控制器的开头添加这行:

accepts_nested_attributes_for :comments

检查文档对于这种方法的进一步细节。

然后,你需要修改的参数,该控制器将允许:

def create_params
 params.permit(:name, :description, :author_id, comments_attributes: [ :author_id, :comments, :record_status ] )
end

修改中列出的属性comments_attributes阵列,以匹配您的Comment模式。

我不知道你想什么的第二个问题就搞定了,但是也许你只需要查询有点不同:

@comments = Comment.where(post_id: @post.id).includes(:author)

以上将返回的评论,包括评论作者名单。



文章来源: Nested routes and CRUD operations with additional values for assciation in Rails