2012-10-06 7 views
9

Ho un modulo per la creazione di materiali (titolo, descrizione e contenuto - tutto di base). Il modulo salva questi dettagli bene ma non salva user_id, che dovrebbe essere user_id di current_user. Come faccio a fare questo? Deve essere facile ma nulla ha funzionato finora.Come aggiungere current_user a user_id in form_for in rails?

def create 
    @material = Material.new(params[:material]) 
    if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
    else 
    render 'new' 
    end 
end 

risposta

10
def create 
@material = Material.new(params[:material]) 
@material.user_id = current_user.id if current_user 
if @material.save 
    flash[:success] = "Content Successfully Created" 
    redirect_to @material 
else 
    render 'new' 
end 
end 
+0

Grazie. È fantastico. – Finnjon

2

Supponendo che si sta salvando oggetti del utenti di accesso nei current_user seguente lavorerà per voi

@material = Material.new(params[:material]) 
    @material.user_id = current_user.id 
    if @material.save 
3

Ci sono diversi modi per farlo a seconda di come avete la vostra installazione dell'applicazione. Se esiste una relazione tra l'utente e materiali (l'utente ha molti materiali), è possibile utilizzare che nel controller:

def create 
    @material = current_user.materials.new(params[:material]) 
    # ... 
end 

Se non si dispone di quel rapporto, io consiglierei comunque impostazione nel regolatore al contrario di un campo nascosto nella forma. Questo sarà più sicuro perché non lasciare che qualcuno manomettere il valore user id:

def create 
    @material = Material.new(params[:material].merge(user_id: current_user)) 
    # ... 
end 
+0

Sì ci ho pensato su come impostare le associazioni. Mi sono trattenuto perché, anche se un utente crea materiali, potrebbe esserci un momento in cui diversi utenti creano materiali e io non volevo ancora occuparmene. Grazie comunque! – Finnjon