Im using Rails 4.1.6 and Ruby 2.1.3
bookmarks_controller.rb
class BookmarksController < ApplicationController
def index
@bookmarks = ListBookmarks.list
render json: @bookmarks.to_json
end
def create
@bookmark = CreateBookmark.new(params[:bookmark]).create
if @bookmark
head 201
else
head 422
end
end
end
bookmarks_controller_test.rb
require 'test_helper'
class BookmarksControllerTest < ActionController::TestCase
test "return ok status if bookmark is created" do
post :create, bookmark: { title: "Tuts+", url: "http://tutsplus.com" }
assert_response 201
end
test "returns not ok status if bookmark is not created" do
post :create, bookmark: {}
assert_response 422
end
end
create_bookmark.rb
class CreateBookmark
def initialize data
@data = data
end
def create
bookmark = Bookmark.new @data
bookmark.save
end
end
But when I run my test it returns:
ActiveModel::ForbiddenAttributesError:
I have change my bookmarks_controller.rb to this:
class BookmarksController < ApplicationController
def index
@bookmarks = ListBookmarks.list
render json: @bookmarks.to_json
end
def create
@bookmark = CreateBookmark.new(bookmark_params).create
if @bookmark
head 201
else
head 422
end
end
private
def bookmark_params
params.require(:bookmark).permit(:title, :url)
end
end
it returns following error:
ActionController::ParameterMissing: param is missing or the value is empty: bookmark