I have this issue with test my CommentsController:
Failure/Error: redirect_to user_path(@comment.user), notice: 'Your comment was successfully added!' ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"users", :id=>nil} missing required keys: [:id]
This is my method in my controller:
def create
if params[:parent_id].to_i > 0
parent = Comment.find_by_id(params[:comment].delete(:parent_id))
@comment = parent.children.build(comment_params)
else
@comment = Comment.new(comment_params)
end
@comment.author_id = current_user.id
if @comment.save
redirect_to user_path(@comment.user), notice: 'Your comment was successfully added!'
else
redirect_to user_path(@comment.user), notice: @comment.errors.full_messages.join
end
end
This is my RSpec:
context "User logged in" do
before :each do
@user = create(:user)
sign_in @user
end
let(:comment) { create(:comment, user: @user, author_id: @user.id) }
let(:comment_child) { create(:comment_child, user: @user, author_id: @user.id, parent_id: comment.id) }
describe "POST #create" do
context "with valid attributes" do
it "saves the new comment object" do
expect{ post :create, comment: attributes_for(:comment), id: @user.id}.to change(Comment, :count).by(1)
end
it "redirect to :show view " do
post :create, comment: attributes_for(:comment), user: @user
expect(response).to redirect_to user_path(comment.user)
end
end
...
end
end
My Comment model:
class Comment < ActiveRecord::Base
belongs_to :user
acts_as_tree order: 'created_at DESC'
VALID_REGEX = /\A^[\w \.\-@:),.!?"']*$\Z/
validates :body, presence: true, length: { in: 2..240}, format: { with: VALID_REGEX }
end
How Can I add user_id
to that request? When I change code in my controller redirect_to user_path(@comment.user)
to redirect_to user_path(current_user)
- test pass. May I redirect_to
user in comments controller? Is any posibility to do it right? Thanks for your time.