合并嵌套属性

时间:2015-08-06 01:31:08

标签: ruby ruby-on-rails-4 nested-attributes rails-api

我有一个使用帖子,评论和作者模型的样本。请参阅以下主题中的完整要求

Nested routes and CRUD operations with additional values for assciation in Rails

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

我从here

获得了解决方案

现在我的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 +0530开始发布“/ api / posts”for 127.0.0.1   由Api :: PostsController处理#create为JSON参数:   {“post”=> {“name”=>“post 11”,“description”=>“desc”,   “comments_attributes”=> [{“author_id”=> 1,“评论”=>“我的新   ..............在12ms内完成500内部服务器错误   (ActiveRecord:0.0ms)

     

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

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

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

请帮我解决这个问题

0 个答案:

没有答案