сохранить две модели из формы не работает ruby ​​rarails - PullRequest
0 голосов
/ 07 сентября 2010

Я новичок с радиальными рельсами.Я хотел написать одновременно в две таблицы из одной формы.

У меня есть настольный компьютер (с именем и ролью в качестве столбца) и таблица ipvfour (с machine_id и ip в качестве столбца).

Итак, я создал в моделях отношение «есть и принадлежит многим».

Но когда я пытаюсь добавить новую машину, если произошел сбой с

неизвестным атрибутом: ip

Я не очень понимаю, почему, кто-то может мне помочь, пожалуйста?


machine.controllers:

def create @machine = Machine.new (params [: machine])

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 }

else

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

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

end

end

end


new.html.erb (machine)

Новая машина

'form',: locals => {: f_machine=> f_machine}%>


_form.html.erb (машина)

<% f_machine.fields_for: ip do | f_ip |%> <% = render: частичный => 'ipvfours / form',: locals => {: f_ip => f_ip}%>
<% end%>


_form.html.erb (ipvfours)

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


Страница для добавления машины корректно отображается со всеми полямино кажется, что запись в БД не удалась из-за .... Я надеюсь, что кто-то сможет мне помочь.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 сентября 2010

РЕДАКТИРОВАТЬ:

Вы можете редактировать любую модель в любом контроллере, если хотите.Есть магический трюк, который называется accepts_nested_attributes_for (google it!)

Ваш код должен выглядеть так:

В вашем контроллере:

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 (machine)

<%= 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

с уважением

симон

...