2010-09-07 50 views
0

我是一個帶有放軌的新手。我想用一張表格同時寫兩張表。從表格中保存兩個模型不工作ruby radrails

我有一個表機(nom和角色爲列)和一個表ipvfour(與machine_id和ip爲列)。

因此,我在模型中創建了關係具有和屬於多。

但是,當我想,如果失敗,

未知屬性添加新機:IP

我真的不明白,爲什麼有人可以幫助我嗎?


machine.controllers:

DEF創建 @machine = Machine.new(PARAMS [:機器])

ipvfour = @machine.ip.create(params[:ip]) 

respond_to do |format| 

    if @machine.save && ipvfour.save 

    flash[:notice] = 'Machine was successfully created.' 

    format.html { redirect_to(@machine) } 

    format.xml { render :xml => @machine, :status => :created, :location => @machine } 

別的

format.html {渲染:動作=>「new」}

format.xml {render:xml => @ machine.errors,:status =>:unprocessable_entity}


new.html.erb(機器)

新機器

'形式',: locals => {:f_machine => f_machine}%>



_form.html.erb(機器)



<%f_machine.fields_for:ip do | f_ip | %> <%=渲染:局部=> 'ipvfours /形式',:當地人=> {:f_ip => f_ip}%>

<%端%>


_form.html。ERB(ipvfours)

<%= f_ip.label :ip %><br /> <%= f_ip.text_field :ip %>


添加機的頁面correclty所有字段中顯示,但它似乎在DB的寫失敗,因爲....我希望有人會能夠幫助我。

在此先感謝。

回答

0

編輯:

您可以在任何控制器,如果你想編輯任何模型。有一個魔術叫 accepts_nested_attributes_for(!google一下)

您的代碼應該是這樣的:

在你的控制器:

def new 
    # .... your code .... 

    # create empty machine 
    @machine = Machine.new 

    # add one empty ip 
    @machine.ipvfours.build 

    # .... your code .... 

end 

def create 

    # fill machine and ipvfours directly 
    @machine = Machine.new(params[:machine]) 

    respond_to do |format| 

    if @machine.save 

     flash[:notice] = 'Machine was successfully created.' 

     format.html { redirect_to(@machine) } 

     format.xml { render :xml => @machine, :status => :created, :location => @machine } 

    else 

     format.html { render :action => "new" } 

     format.xml { render :xml => @machine.errors, :status => :unprocessable_entity } 

    end 

    end 

end 

在你看來:

new.html。 erb

<% form_for(@machine) do |f_machine| %> 

    <%= render :partial => 'form', :locals => { :f_machine => f_machine } %> 

    <%= f_machine.submit 'Create' %> 

<% end %> 

<%= link_to 'Back', machines_path %> 

_form.html.erb(機)

<%= f_machine.error_messages %> 

<% f_machine.fields_for :ipvfours do |f_ip| %> 
    <%= render :partial => 'ipvfours/form', :locals => { :f_ip => f_ip } %> 
<% end %> 

_form.html.erb(ipvfours)

<%= f_ip.label :ip %> 
<br /> 
<%= f_ip.text_field :ip %> 

在你的模型:

機器型號

class Machine < ActiveRecord::Base 

    has_many :ipvfours, :dependent => :destroy 
    accepts_nested_attributes_for :ipvfours 

end 

問候

西蒙

+0

一個事情,我應該在哪裏添加代碼,我不明白? 我的意思是使用機器的控制器寫入I4m,也許我錯了,我應該使用ipvfours控制器。我怎麼能知道控制器用來寫? 在此先感謝。 – Goueg83460 2010-09-08 07:54:44

+0

我已經延長了我的答案;) – sled 2010-09-08 12:51:38

+0

是的,我剛剛看到它。謝謝。所以,我到底該怎麼做,你告訴我,但我仍然有一個問題: 的ActiveRecord :: UnknownAttributeError在MachinesController#創建 未知屬性:ipvfour 請求: { 「機」=> { 「NOM」=> 「蒂蒂」 , 「ipvfour」=> { 「IP」=> 「10.1.1.12」}, 「角色」=> 「dev的」}, 「提交」=> 「創建」, 「authenticity_token」=>「sEoGE2dQUlq6fPL05fTl7Whr2WYWYa34dedi/uc59sI =「} 一個人認爲奇怪的是,當我填充nom和role和ip時,按錯誤順序完成的請求。 再次感謝您的幫助 – Goueg83460 2010-09-08 13:54:26

相關問題