Witam wszystkich,
mam duży problem z nested forms. Otóż chciałbym zrobić formularz dodawania ogłoszenia. Formularz miałby dodawać ogłoszenie i użytkownika (jeśli ten nie istnieje i nie jest zalogowany). Jeśli użytkownik jest zalogowany to formularz miałby być częściowo wypełniony (danymi użytkownika), zaś pola dotyczące samego ogłoszenia miały by być puste - użytkownik dodając ogłoszenie aktualizował by dane konta, zaś ogłoszenie dodawało normalnie. Niestety nie mogę tego osiągnąć.
Robię coś takiego:
USER MODEL:
[code]class User < ActiveRecord::Base
has_many :adverts, :dependent => :destroy;
accepts_nested_attributes_for :adverts, :allow_destroy => true, :reject_if => :all_blank
attr_accessible :email, :name, :password, :phone, :adverts_attributes
…
end[/code]
ADVERT MODEL:
[code]class Advert < ActiveRecord::Base
belongs_to :user
attr_accessible :name, :description
end[/code]
KONTROLER:
[code]class AdvertsController < ApplicationController
def new
@user =
if User.current
User.current
else
User.new
end
@user.adverts.build
end
def create
params[:user][:password] = Devise.friendly_token[0,20];
@user = User.new(params[:user])
if @user.save
redirect_to adverts_url, notice: 'created'
else
render action: 'new'
end
end
end[/code]
FORM:
[code]<%= form_for @user, :url => lodges_url do |u| %>
<% if @user.errors.any? %>
<%= pluralize(@lodge.errors.count, “error”) %> prohibited this lodge from being saved:
- <%= msg %>
<% @user.errors.full_messages.each do |msg| %>
<% end %>
<% end %>
<%= u.fields_for :adverts do |l| %>
<div class="field">
<%= l.label :name %><br />
<%= l.text_field :name %>
</div>
<div class="field">
<%= l.label :description %><br />
<%= l.text_area :description %>
</div>
<% end %>
<div class="field">
<%= u.label :name %><br />
<%= u.text_field :name %>
</div>
<div class="field">
<%= u.label :email %><br />
<%= u.text_field :email %>
</div>
<div class="field">
<%= u.label :phone %><br />
<%= u.text_field :phone %>
</div>
<div class="actions">
<%= u.submit %>
</div>
<% end %>[/code]
Póki co zostaje zrealizowany warunek 1. czyli jesli uzytkownik nie istnieje to go dodaje wraz z ogloszeniem. Jeśli zaś użytkownik dodaje ogłoszenie będąc zalogowanym to od razu ma wypełnione dane ogłoszenia - co nie jest poprawnym zachowaniem i wpis nowy się nie dodaje.
Będę wdzięczny za pomoc.
Pozdrawiam