合并嵌套属性

我有一个使用post,评论和作者模型的样本。 请从以下主题中查看我的完整要求

嵌套路由和CRUD操作以及Rails中的附加值

在这里,我需要在创建post时创建一个注释。 我使用嵌套属性并且工作正常。 但我的问题是我不想要用户的所有属性。 某些属性需要在内部添加。 如果属性没有嵌套属性,我可以合并。 但是合并不适用于嵌套属性。

我从这里得到了解决方案

现在我的params方法如下所示;

private def create_params filtered_params = params.require(:post) .permit([:name, :description, comments_attributes: [:author_id, :comments]]) additional_params = {record_status: 1, comments_attributes: [record_status: 1]} result = filtered_params.merge(additional_params) do |key, oldval, newval| if newval.is_a? Array oldval ||= {} Hash[oldval.map {|k, v| [k, v.merge(newval.first)]}] elsif newval.is_a? Hash oldval ||= {} oldval.merge newval else newval end end result.permit! end 

我的创建方法是;

 def create @post = Post.new(create_params) if @post.save render :show, status: :created end end 

但是我在下面的合并方法中遇到了错误;

在2015-08-06 06:47:08开始POST“/ api / posts”for 127.0.0.1 +0530由Api处理:: PostsController #create as JSON参数:{“post”=> {“name”=>“ post 11“,”description“=>”desc“,”comments_attributes“=> [{”author_id“=> 1,”comments“=>”我的新…………..已完成在12毫秒内500内部服务器错误(ActiveRecord:0.0ms)

NoMethodError(未定义的方法merge' for nil:NilClass):
app/controllers/api/posts_controller.rb:40:in
merge' for nil:NilClass):
app/controllers/api/posts_controller.rb:40:in
merge' for nil:NilClass):
app/controllers/api/posts_controller.rb:40:in
create_params’app / controllers / api / posts_controller.rb merge' for nil:NilClass):
app/controllers/api/posts_controller.rb:40:in
块(2级)中:40:在map'
app/controllers/api/posts_controller.rb:40:in
map'
app/controllers/api/posts_controller.rb:40:in
map'
app/controllers/api/posts_controller.rb:40:in
create_params的app / controllers / api / posts_controller.rb map'
app/controllers/api/posts_controller.rb:40:in
块中:31:在create_params'
app/controllers/api/posts_controller.rb:10:in
create_params'
app/controllers/api/posts_controller.rb:10:in
create_params'
app/controllers/api/posts_controller.rb:10:in
create’

当我使用记录器时,我可以理解从下面的行得到的错误。 (v是无)

  oldval ||= {} Hash[oldval.map {|k, v| [k, v.merge(newval.first)]}] 

请帮我解决这个问题