Это говорит вам, что ошибка:
undefined method `merge!' for "a-sample-blog-post":String
И это происходит только в разделе post :create, :post => blog_post
вашего теста, что означает, что он напрямую связан с созданием нового объекта Post (и не имеет никакого отношения к разделу let(:user)
).
Метод Ruby merge работает только с хешами, но параметры, в которые вы пытаетесь объединить запись :user
, являются строкой, которая несовместима.
Чего я не вижу, так это как вы ассоциируете пользователей с постами. Например, у вас, вероятно, должно быть поле user_id
в модели Post
, которое связывает пользователя с конкретным сообщением (чтобы сообщить вам, кто создал это сообщение).
Итак, переписав это немного:
class Post < ActiveRecord::Base
# tell Rails what we should let the user update via a form
attr_accessible :title, :content
# == Schema Information
#
# Table name: posts
#
# id :integer not null, primary key
# user_id :integer
# title :string(255)
# content :text
# created_at :datetime
# updated_at :datetime
end
В вашем PostsController
def create
@post = Post.new(params[:post])
@post.user_id = current_user.id
if @post.save
# great success
else
# Y U NO SAVE?!
end
end
А ваши параметры должны включать :title
и :content
.
Если вы хотите автоматически связать ваш Factory(:post)
с пользователем, вы можете сделать:
Factory.define :post do |post|
post.association :user
post.title "A sample blog post"
post.content "Duis mollis, est non commodo eget lacinia odio sem nec elit."
end