Let's add a  [uniqueness constraint](http://api.rubyonrails.org/classes/ActiveRecord/Validations/ClassMethods.html#method-i-validates_uniqueness_of) in the model instead, so this can reduce to:

```ruby
report = Report.new post_id: params[:id], post_type: params[:type], user: current_user, text: params[:text])
if report.save
  render nothing: true, status: 200
else
  render nothing: true, status: 409
end
```

If we add the has_many relationship to the User model (`has_many :reports`), we can also write it as:
```
report = current_user.reports.build post_id: params[:id], post_type: params[:type], text: params[:text]
if report.save
  render nothing: true, status: 200
else
  render nothing: true, status: 409
end
```

Lastly if you restructure the passed parameters to match the field names of the model and scope everything under `params[:report]`, as well as further improving the Report model with validations for presence etc., we can also write this as:
```ruby
def create
  current_user.reports.create! report_params
end

private

def report_params
  params.require(:report).permit(:post_id, :post_type, :text)
end
```
`create! report_params` will raise if:

* The report key is missing in the parameters
* Inside the report key other parameters are set than the ones we permitted
* Any of the validations of the model fails, in our case the presence and uniqueness ones

All of these exceptions should be catched by Rails and handled with appropriate status codes.