我有一个使用帖子,评论和作者模型的样本。请参阅以下主题中的完整要求
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):
阻止(2级) create_params'app / controllers / api / posts_controller.rb:40:在create_params中的
app/controllers/api/posts_controller.rb:40:inmap'
块中 app / controllers / api / posts_controller.rb:31:in
app/controllers/api/posts_controller.rb:40:increate_params'
create'
app/controllers/api/posts_controller.rb:10:in
当我使用记录器时,我可以理解从下面的行获得的错误。 (v是无)
oldval ||= {}
Hash[oldval.map {|k, v| [k, v.merge(newval.first)]}]
请帮我解决这个问题