这对我来说是一个新错误,并且正在努力解决它。它还指出:name
Hayden
Rock
Gates
Vishal
Cameroon
Micky
Michael
Tony Waugh
Tom
Tommy
Avinash
Shreyas
Ramesh
Adam
它在我的烘焙控制器中突出显示我的创建方法:
Roaster(#70130698993440) expected, got "1" which is an instance of String(#70130675908140)
场景是我尝试创建三重嵌套表单。对于三个模型 def create
@roast = Roast.new(roast_params)
Roasts
和Countries
,其中烤肉有很多国家和地区有很多地区。
我假设烤火山有问题,但我能看出它是什么。我在那里添加了嵌套模型的关联
Regions
我的表单
def roast_params
params.require(:roast).permit(:roaster, :name, :bestfor, :beans, :roast, :tastingnotes, :notes, :slug, :avatar, :countries_attributes => [:country_name, :regions_attributes => [:region_name]])
end
烤肉控制器
<div class="form-group">
<%= form.fields_for :countries do |countries_form| %>
<%= countries_form.label :country %>
<%= countries_form.text_field :name, class: "form-control" %>
</div>
<div class="form-group">
<%= form.fields_for :regions do |regions_form| %>
<%= regions_form.label :region %>
<%= regions_form.text_field :region_name, class: "form-control" %>
<% end %>
<% end %>
</div>
烤模型
...
def new
@roast = Roast.new
@roast.countries.build.regions.build
end
...
国家/地区模型
class Roast < ApplicationRecord
has_many :tastings
has_many :countries
has_many :notes, through: :tastings
has_many :comments, as: :commentable
belongs_to :roaster
accepts_nested_attributes_for :countries
区域模型
class Country < ApplicationRecord
has_many :regions, inverse_of: :country
accepts_nested_attributes_for :regions
belongs_to :roasts
我在国家参数中嵌套了区域参数,这是正确的吗?我还在其他问题上看到了在class Region < ApplicationRecord
belongs_to :country
中将config.cache_classes
设置为true
的建议,但这对此没有帮助。
更新 因此,我认为它与嵌套表单无关,而是与我使用的collection_select无关。
development.rb
因此,此选择会从名为<%= form.label :roaster, class: 'control-label' %>
<%= form.collection_select(:roaster, Roaster.order(:roaster_name).all, :id, :roaster_name, prompt: true, class: "form-control") %>
的模型中提取roaster_name
。
我的参数现在如下所示:
Roaster
在提交表单时查看控制台,似乎只是:Roaster的id被传递,而不是值:roaster_name。
params.require(:roast).permit(:roaster_name, :roaster, :name, :bestfor, :beans, :roast, :tastingnotes, :notes, :slug, :avatar, :countries_attributes => [:country_id, :country_name, :regions_attributes => [:region_id, :region_name]])
无法解决这个问题
答案 0 :(得分:0)
Roast#roaster=
)时,会引发 ActiveRecord::AssociationTypeMismatch
。预计会Roaster
,得到String
。
问题似乎在于将roaster
作为一个参数传递,这是&#34; 1&#34;您的示例中的(字符串)。我猜这实际上是一个Roaster的ID,问题中的表单代码没有显示出来。
也许您打算允许并传递roaster_id
param?
def roast_params
params.require(:roast).permit(:roaster_id, # ...
end