我是RoR的新手,这让我疯狂。未保存的Rails嵌套属性
我想使用嵌套属性将记录放在两张桌子上,只使用一种形式。这在教程中看起来很简单,但我做错了一些事情,无法弄清楚。 我检查了其他线程与类似的问题,没有运气。
也许你们可以帮助我。
这里是我的两个型号
class Encuesta < ActiveRecord::Base
has_one :encuestas_titulos_idioma, :dependent=>:destroy
accepts_nested_attributes_for :encuestas_titulos_idioma
end
class EncuestasTitulosIdioma < ActiveRecord::Base
belongs_to :encuestas
end
IHAVE还为嵌套属性的许可证。
def encuesta_params
params.require(:encuesta).permit(:estado, :servicio_asociado, encuestas_titulos_idiomas_attributes: [ :titulo, :descripcion, :encuesta_id ])
end
这里是形式
<%= form_for(@encuesta) do |f| %>
<% if @encuesta.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@encuesta.errors.count, "error") %> prohibited this encuesta from being saved:</h2>
<ul>
<% @encuesta.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :estado %><br>
<%= f.text_field :estado %>
</div>
<div class="row">
<%= f.fields_for :encuestas_titulos_idiomas do |ff| %>
<div class="medium-12 columns">
<%= ff.label :titulo %>
<%= ff.text_field :titulo %>
</div>
<div class="medium-12 columns">
<%= ff.label :descripcion %>
<%= ff.text_area :descripcion, rows: 4 %>
</div>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
任何想法有什么不好? 非常感谢。
编辑。修正:
我发现问题(和解决方案)。 这是为了万一它可以帮助某人。
在控制器新行动,对于HAS_ONE协会,我们应该使用
def new
@encuesta = Encuesta.new
@encuesta.build_encuestas_titulos_idioma
end
不
@encuesta.encuestas_titulos_idioma.build
我们使用has_many关联。
您收到了错误?如果所有数据都被发送,你可以检查控制台吗? – psantos
感谢您的回复。我得到了不允许的参数:encuestas_titulos_idiomas 然后,我将名称更改为单数(以匹配accepts_nested_attributes_for参数),但错误仍然存在。看起来像一个命名约定的错误,但找不到它。 – Sonia
变化'accepts_nested_attributes_for:encuestas_titulos_idioma'到'accepts_nested_attributes_for:encuestas_titulos_idiomas' 而我的建议是:总是使用英文名字。 – psantos