【发布时间】:2017-01-09 14:39:00
【问题描述】:
我想使用多态关联创建对象,但它返回如下错误:
NoMethodError (undefined method `new' for nil:NilClass):
这里是参数:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"TAQdqSTXAFCrq6yZBUnjVXe7IsPqmxuLh/qM/2QvKaVvsfP
/Sy6VNF7H38IzOg8aMj39t6HR+aZLLtyj8uMzyw==", "search"=>"Newport-Mesa Unified
School District", "id"=>"32", "type"=>"PrivateSchool", "commit"=>"Submit"}
这里是模型:
class PrivateSchool < ActiveRecord::Base
has_many :popular_schools, as: :resource, :dependent => :destroy
end
class PopularSchool < ActiveRecord::Base
belongs_to :resource, polymorphic: true
end
class School < ActiveRecord::Base
has_many :popular_schools, as: :resource, :dependent => :destroy
end
控制器代码:
def index
@popular_school = PopularSchool.new
@popular_schools = PopularSchool.all
end
def create
@popular_school.new.save
respond_to do |format|
format.html { redirect_to root_path }
format.json { head :no_content }
format.js
end
end
【问题讨论】:
-
@popular_schoolinnilincreate操作。相反,它应该是@popular_school = PopularSchool.new(params) -
@Deep 我们需要重新定义参数吗?它是多态的,它应该自动工作,因为我没有提交其他参数。你能解释一下吗?
-
您没有定义参数。
params是您从视图接收的数据。因此,使用该数据您将创建一个新对象并将其保存在数据库中。您在index操作中创建的@popular_school不再在任何其他action中可用,只能在视图中使用。 -
即使在使用多态之后我们还需要在私有方法中再次定义参数?那我怎么修呢?我在参数中只有两件事。我只想将
, "id"=>"32", "type"=>"PrivateSchool"保存在数据库中。 -
正在创建记录,但
"id"=>"32", "type"=>"PrivateSchool"未保存在数据库中。代码是:@popular_school = PopularSchool.new(name: params[:name]) @popular_school.save可以吗?
标签: ruby-on-rails ruby-on-rails-4 associations polymorphic-associations