Rails嵌套属性不保存

时间:2015-09-12 22:19:31

标签: ruby-on-rails

我是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关联。

3 个答案:

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

如果错误仍然存​​在,请告诉我这些更改后数据的发送方式。