¿Puede alguien decirme por qué la entidad siempre crea con name == nil:

En ProductosControlador:

def create
  @product = Product.new(name: params[:product][:name])
  byebug
  if @product.save
    redirect_to users_path
  end
end

En vista :

<%= form_for Product.new do |f| %>
   <%= f.label :name %>
   <%= f.text_field :name %>

   <%= f.submit %>
<% end %>

Modelo:

class Product < ApplicationRecord
     has_many :categories
     attr_accessor :name
end
0
nikolay 20 oct. 2017 a las 14:35

3 respuestas

La mejor respuesta

¿Alguien puede decirme por qué la entidad siempre crea con name == nil

Por tu attr_accessor. Sobrescribe los métodos creados automáticamente desde el registro activo (los que saben sobre persistencia). Solo quítalo.

( suponiendo que su tabla products tiene la columna name. Si no es así, cree una migración para agregarla. )

4
Sergio Tulentsev 20 oct. 2017 a las 11:51

Tendrá que asegurarse de estar usando parámetros fuertes para esto, de lo contrario, los parámetros no pasarán como se esperaba, es decir

def create
  @product = Product.new(product_params)
  byebug
  if @product.save
    redirect_to users_path
  end
end

private

def product_params
  params.require(:product).permit(:name)
end

Puede encontrar más información aquí: http://guides.rubyonrails.org/action_controller_overview.html # parámetros-fuertes

1
SRack 20 oct. 2017 a las 11:46

Name no se guarda en la base de datos porque ha utilizado name como attr_accessor.

Cree la columna name en la tabla product. Si ya tiene la columna name, elimine attr_accessor :name del modelo product.rb.

0
puneet18 20 oct. 2017 a las 11:49