У меня нет спецификации запроса на модели с ассоциацией; когда я в нее binding.pry
, я могу вручную создать запись с теми же параметрами, но когда я пропускаю их через запрос post '/path/model'
, она терпит неудачу и говорит, что ассоциация должна существовать. Это хорошо - я хочу, чтобы ассоциация потребовалась. Но действие post
, кажется, не может пройти.
# job model
belongs_to :worker
validates :title, presence: true
# worker model
has_many :jobs
# jobs controller
# POST /jobs
def create
@job = Job.create!(job_params)
json_response(@job, :created)
end
# jobs request spec
describe "POST /v1/jobs" do
context "when the request is valid" do
before {
post '/v1/jobs', params: {
title: "Whatever",
worker_id: Worker.first.id,
}
}
it "creates a job" do
puts request.body.read
puts response.body
expect(json["title"]).to eq("Whatever")
end
it "returns status code 201" do
expect(response).to have_http_status(201)
end
end
end
Оба теста не пройдены. Результат приведенных выше операторов puts
:
title=Whatever&worker_id=21
{"message":"Validation failed: Worker must exist"}
Если вместо этого поставить binding.pry
, следующее успешно создаст Job
:
Job.create(title: "Whatever", worker_id: Worker.first.id)
Мои миграции:
# jobs migration
create_table :jobs do |t|
t.references :worker, index: true
t.text :title
end
# worker migration
create_table :workers do |t|
t.text :first_name
...
end
Что мне здесь не хватает? Я знаю, что ассоциация belongs_to
теперь не является обязательной в Rails 5, но опять же, Я хочу это . Поэтому я не хочу отмечать это optional
только для того, чтобы сдать мои тесты. Есть идеи?