2012-10-06 10 views
9

Malzemeler oluşturmak için bir formum var (başlık, açıklama ve içerik - tümü temel). Form bu ayrıntıları gayet iyi kaydeder ancak mevcut_kullanıcının user_id'i olan user_id değerini kaydetmez. Bunu nasıl yaparım? Kolay olmalı ama şu ana kadar hiçbir şey işe yaramadı.Radarlarda form_for için user_id'e current_user nasıl eklenir?

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

cevap

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

Teşekkürler. Bu harika. – Finnjon

2

için çalışacak aşağıdaki current_user oturum açma kullanıcıların en nesneyi kaydederken varsayarsak

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

o Başvurunuzun kurulum şekline göre yapmak için birkaç farklı yolu vardır. kullanıcı ve malzemelerin (Kullanıcı birçok malzeme vardır), kendi denetleyici o kullanabiliriz arasında bir ilişki ise: Eğer bu ilişkiyi yoksa

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

, ben hala denetleyicisi ayarlamayı öneriyoruz formdaki gizli bir alanın aksine. Evet ben dernek ayarlama düşünüyordum

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

: birisi kullanıcı kimliği değeri ile oynamalarına izin vermez, çünkü bu daha güvenli olacaktır. Geriye katlandım çünkü bir kullanıcı materyal oluştursa da, birçok kullanıcının materyal ürettiği ve bununla uğraşmak istemediğim bir zaman gelebilir. Yine de teşekkürler! – Finnjon

İlgili konular