Rails无法为新实体分配属性

时间:2017-10-20 11:35:57

标签: ruby-on-rails

有人可以告诉我为什么实体总是使用name == nil创建:

ProductsController中的

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

3 个答案:

答案 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