2015-09-12 182 views
0

我是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關聯。

+1

您收到了錯誤?如果所有數據都被髮送,你可以檢查控制檯嗎? – psantos

+0

感謝您的回覆。我得到了不允許的參數:encuestas_titulos_idiomas 然後,我將名稱更改爲單數(以匹配accepts_nested_attributes_for參數),但錯誤仍然存​​在。看起來像一個命名約定的錯誤,但找不到它。 – Sonia

+0

變化'accepts_nested_attributes_for:encuestas_titulos_idioma'到'accepts_nested_attributes_for:encuestas_titulos_idiomas' 而我的建議是:總是使用英文名字。 – psantos

回答

0

您可以使用拐點,所以Rails會知道如何獲得本次非英語單詞的單數/複數

config/intializers/inflections.rb添加

ActiveSupport::Inflector.inflections do |inflect| 
    inflect.irregular 'singular', 'plural' 
end 
+0

謝謝bidsolom。我已經在使用它們。 – Sonia

0

問題就在這裏:

params.require(:encuesta).permit(:estado, :servicio_asociado, encuestas_titulos_idiomas_attributes: [ :titulo, :descripcion, :encuesta_id ]) 

由於關聯的has_one是: 因此,您必須更改,將encuestas_titulos_idiomas_attributes更改爲encuestas_titulos_idioma_attributes 0(單數:idioma)。

正如說psantos:在形式上。在EncuestasTitulosIdioma類belongs_to :encuestas

編輯 我也覺得在你的崗位。這裏換成belongs_to :encuesta

+0

我在發佈問題之前就做了它,並且嵌套的屬性字段沒有顯示在表單中....這讓我發瘋 – Sonia

+0

只要確保您在任何地方都使用'encuentas_titulos_idioma'。而不是'encuestas_titulos_idiomas' –

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 

如果錯誤繼續,告訴我怎樣的數據正在這些變化後發送。

+0

我已經做到了。問題是,如果我在許可證和表單中都更改它,則嵌套字段不會顯示在表單中。 也許我錯過了我的控制器中的東西... – Sonia