我是RoR的新手,这让我发疯了。
我尝试使用嵌套属性仅使用一个表单将记录放在2个表上。这在教程中看起来很容易,但是我做错了什么并且无法弄明白。 我已经检查过其他类似问题但没有运气的线程。
也许你们可以帮助我。
这是我的两个模特
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
我还设置了嵌套属性的许可。
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 %>
知道出了什么问题吗? 非常感谢。
EDIT。固定:
我发现了问题(和解决方案)。 这是为了以防万一。
在控制器 new 操作中,对于has_one关联,我们应该使用
def new
@encuesta = Encuesta.new
@encuesta.build_encuestas_titulos_idioma
end
不
@encuesta.encuestas_titulos_idioma.build
我们用于has_many关联。
答案 0 :(得分:0)
您可以使用变形,以便Rails知道如何获得这些非英语单词的单数/复数
在config/intializers/inflections.rb
添加
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'singular', 'plural'
end
答案 1 :(得分:0)
问题在于:
params.require(:encuesta).permit(:estado, :servicio_asociado, encuestas_titulos_idiomas_attributes: [ :titulo, :descripcion, :encuesta_id ])
您必须使用encuestas_titulos_idiomas_attributes
更改encuestas_titulos_idioma_attributes
,因为关联的has_one是:
encuestas_titulos_idioma
(单数:idioma)。
正如psantos所说:在形式上也是如此。
修改强>
我还在你的帖子中找到了:belongs_to :encuestas
在EncuestasTitulosIdioma课程。此处替换为belongs_to :encuesta
。
答案 2 :(得分:0)
首先:
def encuesta_params
params.require(:encuesta).permit(:estado, :servicio_asociado, encuestas_titulos_idioma_attributes: [ :titulo, :descripcion, :encuesta_id ])
end
然后:
# ...
<%= f.fields_for :encuestas_titulos_idioma do |ff| %>
# ...
您可以像这样保留模型:
class Encuesta < ActiveRecord::Base
has_one :encuestas_titulos_idioma, :dependent=>:destroy
accepts_nested_attributes_for :encuestas_titulos_idioma
end
如果错误仍然存在,请告诉我这些更改后数据的发送方式。