Well, if you just fix the second option:
@post = current_user.posts.create(post_params) # не build, а ^^^^^^
... then no .
But only provided that user_id is a foreign key of the user in the User#posts association, in accordance with Rails conventions. Therefore, the first option is worse , because in this way knowledge about the internal structure of the association is spreading to where it does not belong. If it changes, you will have to update there.
And so, you can treat current_user.posts as Post.where(user_id: current_user.id) , while create and build will work the same way.
If we correct in the opposite direction, then in the first version you should replace Post.create with Post.new and add @post.save at the end.
But we live in a non-ideal world! And in this non-ideal world there are bugs . In particular, rails/rails#14003 , because of which performing one action A (for example, checking Model.all for something in a valdation or callback) inside action B (for example, Model.скоуп.create(...) ) you can suddenly find that inside A for some reason acts B scup, as a result of which A is not executed as intended .
There is little chance of crashing into it (and it is often treated very simply, like replacing create with new / build & save ), but you should be ready for it.