Ruby on rails 嵌套路由和CRUD操作以及Rails中关联的附加值
我在rails api中创建了一个有很多贯穿关系的应用程序。我还使用嵌套路由 我的模型如下Ruby on rails 嵌套路由和CRUD操作以及Rails中关联的附加值,ruby-on-rails,ruby,rails-activerecord,rails-api,nested-routes,Ruby On Rails,Ruby,Rails Activerecord,Rails Api,Nested Routes,我在rails api中创建了一个有很多贯穿关系的应用程序。我还使用嵌套路由 我的模型如下 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
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
所以我的目标是
def创建
params=create_params.merge(:record_status=>1)
@post=post.new(参数)
@post.authors 1,评论:{record_status:1})
结束
私有的
def取货站
@post=post.find(参数[:post\u id])
结束
结束
这里我在联接表“comments”中找到了作者,但没有正确的注释
请帮助我解决这些问题对于第一个问题,您希望配置
posts\u控制器
以接受注释的嵌套属性。在控制器的开头添加此行:
accepts_nested_attributes_for :comments
有关此方法的详细信息,请查看
然后,您需要修改控制器将允许的参数:
def create_params
params.permit(:name, :description, :author_id, comments_attributes: [ :author_id, :comments, :record_status ] )
end
修改comments\u attributes
数组中列出的属性,以匹配Comment
模型中的属性
我不确定你想在第二个问题中得到什么,但也许你只需要换一种方式来查询:
@comments = Comment.where(post_id: @post.id).includes(:author)
上述操作将返回包括注释作者在内的注释列表。对于第一个问题,您希望配置
posts\u控制器
以接受注释的嵌套属性。在控制器的开头添加此行:
accepts_nested_attributes_for :comments
有关此方法的详细信息,请查看
然后,您需要修改控制器将允许的参数:
def create_params
params.permit(:name, :description, :author_id, comments_attributes: [ :author_id, :comments, :record_status ] )
end
修改comments\u attributes
数组中列出的属性,以匹配Comment
模型中的属性
我不确定你想在第二个问题中得到什么,但也许你只需要换一种方式来查询:
@comments = Comment.where(post_id: @post.id).includes(:author)
以上内容将返回包括评论作者在内的评论列表。谢谢。我算了算,我明白了。但是一个小小的变化。我不希望在请求中记录\u状态字段值。相反,我需要给出默认值。如何将关联表的记录_状态值合并到参数中。您可以将其从允许的参数中取出。让客户端发布该值,然后服务器将忽略它b/c这不是允许的参数。或者在客户端将属性发布到服务器之前删除该属性。我可以限制客户端的参数。但我需要在控制器中包含这些参数。我的意思是参数需要在内部给出,而不是客户端。在这里,我需要从允许的参数中删除该参数,并需要在控制器中合并。但是合并不起作用,请帮忙我不明白你在做什么。您应该编辑此问题并显示不起作用的代码,或者发布新问题。如果这个答案有帮助的话,那就投票吧。好吧,我结束了这个问题,并为我的问题创建了另一个问题,以避免混淆。谢谢。我算了算,我明白了。但是一个小小的变化。我不希望在请求中记录\u状态字段值。相反,我需要给出默认值。如何将关联表的记录_状态值合并到参数中。您可以将其从允许的参数中取出。让客户端发布该值,然后服务器将忽略它b/c这不是允许的参数。或者在客户端将属性发布到服务器之前删除该属性。我可以限制客户端的参数。但我需要在控制器中包含这些参数。我的意思是参数需要在内部给出,而不是客户端。在这里,我需要从允许的参数中删除该参数,并需要在控制器中合并。但是合并不起作用,请帮忙我不明白你在做什么。您应该编辑此问题并显示不起作用的代码,或者发布新问题。如果这个答案是有帮助的,那么投赞成票也无妨。好吧,我结束了这个问题,并为我的问题创建了另一个问题,以避免混淆。