Home > Mobile >  Rails API get params to a custom method
Rails API get params to a custom method

Time:01-30

Am trying to filter some data from database but its not getting params. This is my method:

def user_orders
 orders = Order.select { | item | item[:user_id] == params[:id] }
 if orders
  render json: orders, status: :ok
 else
  render json: {error: "No orders available"}
 end
end 

This is the custom routing

get "/orders/user/:id", to: "orders#user_orders"

and the response is an empty array. However if I pass in a number in the method like so:

orders = Order.select { | item | item[:user_id] == 27 }

I get back the filtered array as expected. How can I pass in a dynamic ID from the routing?

CodePudding user response:

EDIT: if your parameters look like this:

Parameters: { … "order"=>{…"user_id"=>27}}

… then you need to access the user_id as params[:order][:user_id].

Otherwise your conditional is comparing nil to 27, which will return false, and so nothing is ever selected.

If you’re querying an activerecord model, I also recommend that you use Order.where(item: {user_id: params[:id]}) to find your list of orders, so that and rails can cast to the right type as well.

What does the line in the rails log say? It should start with GET /user/orders and it should list what parameters have actually been received. Alternatively you can use puts to check the content of params.

  • Related