Automatyczne dodawanie do tabeli id użytkownika

Witam serdecznie,

mam kolejny problem na który się natknąłem podczas nauki railsów.
Otóż mam wygenerowane modele, kontrolery, widoki wszystko fajnie. Korzystam z modułu authologic do autentykacji i autoryzacji.
Mam sobie dwa modele:

advert:

class Advert < ActiveRecord::Base attr_accessible :title, :description belongs_to :users end
user:

class User < ActiveRecord::Base acts_as_authentic has_many :adverts end
mam także wygenerowane formularze do dodawania wpisów do bazy.
Moim problemem jest to iż chciałbym dodać wpis z tego formularza, który posiada pola title i description do bazy wraz z id uzytkownika ktory dodaje wpis (który jest zalogowany). Pola w id usera w formularzu nie mam.

Obecnie robie to tak (bez id usera):

def create @advert = Advert.new(params[:advert]) if @advert.save flash[:notice] = "Wpis dodano" redirect_to @advert else render :action => 'new' end end
Dodam iż w bazie jest zrobiona relacja 1:n (jeden user może dodać wiele wpisów).
Będę wdzięczny za pomoc.

Zakładam że masz metodę current_user która Ci zwróci aktualnie zalogowanego użytkownika. Wówczas

def create
    @advert = Advert.new(params[:advert].merge({user_id => current_user.id}))
    ... 
end

et voila!

Super oto mi chodziło.
Dzięki za pomoc.

Pozdrawiam
Piotrek

@advert = current_user.adverts.new(params[:advert])

[quote]@advert = current_user.adverts.new(params[:advert])
[/quote]
hmm ciekawe rozwiązanie :slight_smile:
Z ciekawości się zapytam czy jest jakaś znaczna różnica między pierwszym zapisem hubertlepick’a a tym (np. wydajnościowa, poprawnościowa wg jakiejś konwencji itp)?

Jako początkujący pytam bym wiedział jak w przyszłości pisać by było jak najbardziej poprawnie.
Idąc dalej w tę stronę natknąłem się na kolejny problem mianowicie, mam sobie

_form.html.erb:

[code]<% form_for @advert do |f| %>

<%= f.label :title %>
<%= f.text_field :title %>

....

<% end %>[/code] adverts_controller.html.erb: [code]def show @advert = Advert.find(params[:id]) end

def new
@advert = Advert.new
@advertDetail = AdvertDetail.new
end[/code]
moje pytanie to czy da się dołączyć w metodzie new do @advert obiekt @advertDetail tak by <% form_for @advert do |f| %> mieć dostęp do pól znajdujących sie w modelu advetDetail (to samo chciałbym uzyskać w metodzie show)?

Szukałem w google ale szczątkowe informacje są na ten temat (chyba że źle szukałem) :slight_smile:

Jeśli AdvertDetail jest powiązany z Advert relacją has_many lub has_one to zobacz:
http://ryandaigle.com/articles/2009/2/1/what-s-new-in-edge-rails-nested-attributes

Z kolei w akcji show najlepiej coś w stylu:

@advert = Advert.find(params[:id], :include => :advert_detail)

[quote=mits][quote]@advert = current_user.adverts.new(params[:advert])
[/quote]
hmm ciekawe rozwiązanie :slight_smile:
Z ciekawości się zapytam czy jest jakaś znaczna różnica między pierwszym zapisem hubertlepick’a a tym (np. wydajnościowa, poprawnościowa wg jakiejś konwencji itp)?[/quote]
Zdecydowanie lepiej wygląda to od strony “poprawnościowej”. Zwróć uwagę na to, że taki ficzer Railsów o wiele ułatwia robotę, jeśli chodzi o np. relację habtm through.

jest to także bezpieczniejsze, bo nie musisz sprawdzać czy ktoś nie podmienił user_id i nie próbuje przypisać komuś innemu danego adverta

super dzięki za odpowiedzi.
Są one na początek naprawdę bardzo pomocne.

Pozdrawiam