Param is missing or the value is empty: productos


#1

buenas gente, ya no se donde acudir con mi problema. Necesito aprender a
usar Ruby on rails para un trabajo pero toda la informacion q encuentro
es de rails 3 o esta en ingles y la verdad se algo pero no del todo

genere un modelo Productos,
los metodos new , index y edit se crearon automaticamente con la
instruccion rails g controller productos index new edit
los demas los hice a mano por q los necesito para guardar en la base de
datos

cree una vista new en productos
q le puse esto, busque por todos lados y con esta fue donde mas cerca
estuve de guardar en base de datos q es la q se usa por defecto en rails

<%= form_tag productos_path, method: :post do%>
<% if @productos.errors.any? %>


<%= pluralize(@productos.errors.count, “error”) %> prohibited
this productos from being saved:

  <ul>
  <% @productos.errors.full_messages.each do |message| %>
    <li><%= message %></li>
  <% end %>
  </ul>
</div>

<% end %>

<%= label_tag :titulo %>
<%= text_field_tag :titulo%>
<%= label_tag :descripcion %>
<%= text_field_tag :descripcion %>
<%= label_tag :imagen %>
<%= text_field_tag :imagen %>
<%= submit_tag %>
<% end %>

relleno todos los campos y al darle al boton me dice esto:

param is missing or the value is empty: productos

Extracted source (around line #60):
58
59
60
61
62

def productos_params
params.require(:productos).permit(:titulo, :descripcion, :imagen)
end
end

sin embargo creo q los parametros estan bien

Request

Parameters:

{“utf8”=>“✓”,
“authenticity_token”=>“3rUoNo5fdqN3LJN5gb8X6y+xE+1BjZxBnSkLwCjwQpI=”,
“titulo”=>“coca”,
“descripcion”=>“cola”,
“imagen”=>“skdhasjkdh.png”,
“commit”=>“Save changes”}

este es el controlador:

class ProductosController < ApplicationController
before_action :set_productos, only: [:show, :edit, :update, :destroy]
def index
@productos = Productos.all

end

def new
  @productos = Productos.new
end

def edit
end

def update
respond_to do |format|
  if @productos.update(productos_params)
    format.html { redirect_to @productos, notice: 'Usuario was

successfully updated.’ }
format.json { render :show, status: :ok, location: @productos }
else
format.html { render :edit }
format.json { render json: @productos.errors, status:
:unprocessable_entity }
end
end
end

def create
@productos = Productos.new(productos_params)

  respond_to do |format|
    if @productos.save
      format.html { redirect_to @productos, notice: 'Productos was

successfully created.’ }
format.json { render :show, status: :created, location:
@productos }
else
format.html { render :new }
format.json { render json: @productos.errors, status:
:unprocessable_entity }
end
end
end

def destroy
@productos.destroy
respond_to do |format|
format.html { redirect_to usuarios_url, notice: ‘Usuario was
successfully destroyed.’ }
format.json { head :no_content }
end
end

def set_productos
@productos = Productos.find(params[:id])
end

def productos_params
params.require(:productos).permit(:titulo, :descripcion, :imagen)
end
end

básicamente se me acabaron los lugares donde buscar respuestas si
alguien tiene la mas leve idea de q puede estar pasando o por donde
deberia seguir investigando le agradeceria mucho


#2

Te contesto asi rapidamente. Los parametros tal cual los estas pasando
te van a dar problemas.

En tu caso el modelo es ‘producto’. Para generar el formulario de un
producto deberias usar form_for:

#views/products/_form.html.erb ??
form_for @product … do |form|

form.text_field :titulo

end

Si relllenas el formulario con el codigo anterior te acabara pasando los
parametros como:
product[titulo]
product[descripcion]

Asi cuando la accion del controlador que reciba los datos, los podra
interpretar correctamente como estabas haciendo tu con:

params.require(:productos).permit(:titulo, :descripcion, :imagen)

De lo contrario, como estabas pasando los paremetros anteriormente solo
los podras leer usando params[:titulo]. Pero esto esta lejos (en tu uso
actual de producto muy lejos) de ser lo ideal. No me enrollo, pero los
parametros asi pasados no se suelen utilizar con nada que tenga que ver
con un modelo.

Como nota final, en el controlador el modelo siempre deberia ser
singular (product), las tablas las creara en plural (products). Yo
usaria ingles para escribir los modelos, en español puedes tener
problemas para los cambios de numero, por ejemplo: que lo mismo rails se
piensa que el plural de ‘persona’ es ‘persons’ :smiley:


Aplicaciones web en rails a medida: http://drails.com