dimanche 11 décembre 2016

Rails Ember strong parameters clarification

What should the strong parameters for my chapters_controller be if I have a Book entity and a Chapter entity?

Note: I am using JSON API.

In my chapters_controller, should my strong parameters be:

:title, :order, :content, :published, :book, :picture

Or should it be:

:title, :order, :content, :published, :book_id, :picture

If I use :book instead of :book_id, then in my Ember application, when I go to create a new chapter, I am able to create it and associate this chapter to the parent book, however, my test fails:

def setup
  @book = books(:one)

  @new_chapter = {
    title: "Cooked Wolf Dinner",
    order: 4,
    published: false,
    content: "The bad wolf was very mad. He was determined to eat the little pig so he climbed down the chimney.",
    book: @book
  }
end

def format_jsonapi(params)
  params = {
    data: {
      type: "books",
      attributes: params
    }
  }
  return params
end

...

test "chapter create - should create new chapter assigned to an existing book" do
  assert_difference "Chapter.count", +1 do
    post chapters_path, params: format_jsonapi(@new_chapter), headers: user_authenticated_header(@jim)
    assert_response :created

    json = JSON.parse(response.body)

    attributes = json['data']['attributes']

    assert_equal "Cooked Wolf Dinner", attributes['title']
    assert_equal 4, attributes['order']
    assert_equal false, attributes['published']
    assert_equal @book.title, attributes['book']['title']
  end
end

I get error in my console saying Association type mismatch.

Perhaps my line:

book: @book 

is causing it?

Either way, gut feeling is telling me I should be using :book in my chapters_controller strong parameters.

It's just my test isn't passing, and I am not sure how to write the parameter hash for my test to pass.




Aucun commentaire:

Enregistrer un commentaire