如何将param逗号分隔的字符串id解析为has_many mongoid字段



如何在post params中处理tag_ids以将其保存在相关模型中?我只想使用post_params方法。

has_many :tags
def post_params
  params.require(:post).permit(:title, :message, :tag_ids)
end
#Parameters: {"post"=>{"title"=>"asdf", "message"=>"asfd", "tag_ids"=>"543d727a4261729ecd000000,543d8a914261729ecd010000"}}

我有:

Mongoid::Errors::InvalidValue -
Problem:
  Value of type String cannot be written to a field of type Array

我找到了解决方案,但我不喜欢它,在Post模型中我添加了:

def tag_ids=str
  str.split(',').each do |id|
    t = Tag.find(id)
    self.tags << t
  end
end

我认为您必须在控制器中的create操作中修改tag_ids中的传入数据。

因此,当您收到数据时,在将数据保存到DB之前,例如:post.create!,您应该在PostsController操作create:中添加解析

如果你想要字符串数组:

post.tag_ids = params[tag_ids]split(",")

或者如果您想要整数数组:

post.tag_ids = params[tag_ids]split(",").map(&:to_i)

类似的东西?(我假设你想要一个ObjectId阵列)

id_array = params['post']['tag_ids'].split(',').map { |id| BSON::ObjectId.from_string(id) }
params['post']['tag_ids'] = id_array

相关内容

最新更新