有人可以告诉我为什么实体总是使用name == nil
创建:
:
def create
@product = Product.new(name: params[:product][:name])
byebug
if @product.save
redirect_to users_path
end
end
在视图中:
<%= form_for Product.new do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
模型:
class Product < ApplicationRecord
has_many :categories
attr_accessor :name
end
答案 0 :(得分:4)
有人可以告诉我为什么实体总是使用
创建name == nil
因为你的attr_accessor
。它会从活动记录(知道持久性的记录)中覆盖自动创建的方法。只需删除它。
(假设您的表格products
有列name
。如果没有,请创建迁移以添加它。)
答案 1 :(得分:1)
您需要确保您使用强参数,否则参数不会按预期传入,即
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
可以在此处找到更多信息:http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters
答案 2 :(得分:0)
Name
未保存在数据库中,因为您已将name
用作attr_accessor
。
在name
表格中创建product
列。如果您已有name
列,请从attr_accessor :name
模型中删除product.rb
。