now i'm doing a grocery website. I trying to build an order form that can choose select supplier and outlet,so admin can create order by choosing which supplier and outlet, but now it come out error say unpermitted parameters.
Orders Controller
class OrdersController < ApplicationController
def supplier
@supplier = Supplier.find(params[:id])
end
def outlet
@outlet = Outlet.find(params[:id])
end
def index
@orders = Order.all
end
def show
@order = Order.find(params[:id])
end
def new
@order = Order.new
@supplier = Supplier.all
@outlet = Outlet.all
end
def create
@order = Order.new(order_params)
@supplier_id = Supplier.all
@outlet_id = Outlet.all
if @order.save
flash[:success] = "Succesful create!"
redirect_to @order
else
render 'new'
end
end
private
def order_params
params.require(:order).permit(:supplier_id,:grand_total, :order_date,
:delivery_date, :delivery_address, :outlet_id)
end
end
new.html.erb
<% provide(:title, "Create Orders") %>
<h1>Create Order</h1>
<div >
<div >
<%= form_with(model: @order, local: true) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :supplier %>
<%= f.select(:supplier, Supplier.all.collect { |l| [ l.name, l.id] }, {class: "form-select"}) %>
<%= f.label :grand_total %>
<%= f.number_field :grand_total, class: 'form-control' %>
<%= f.label :order_date %>
<%= f.date_field :order_date, class: 'form-control' %>
<%= f.label :delivery_date %>
<%= f.date_field :delivery_date, class: 'form-control' %>
<%= f.label :delivery_address %>
<%= f.text_field :delivery_address, class: 'form-control' %>
<%= f.label :outlet %>
<%= f.select(:outlet, Outlet.all.collect { |l| [ l.name, l.id] }, {class: "form-select"}) %>
<%= f.submit "Create order", class: "btn btn-primary" %>
<% end %>
</div>
</div>
Order migration table in schema
create_table "orders", force: :cascade do |t|
t.integer "supplier_id"
t.integer "grand_total"
t.date "order_date"
t.date "delivery_date"
t.string "delivery_address"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "outlet_id"
end
CodePudding user response:
The reason you're getting
Unpermitted parameters: :supplier, :outlet
is because you're not allowing :supplier
and :outlet
params but :supplier_id
and :outlet_id
in order_params
The Fix
Change this in your view new.html.erb
<%= f.label :supplier_id %>
<%= f.select(:supplier_id, Supplier.all.collect { |l| [ l.name, l.id] }, {class: "form-select"}) %>
<%= f.label :outlet_id %>
<%= f.select(:outlet_id, Outlet.all.collect { |l| [ l.name, l.id] }, {class: "form-select"}) %>
This should fix the issue by allowing the :supplier_id
and :outlet_id
params and assigning the object with proper values