2016-03-20 19 views
0

user model ve shout modelim var. Bir kullanıcının bir notla ilişkilendirilmesini sağlamaya çalışıyorum. Bu ilişkiyi seslendirme masasının yaratılması üzerine yapmadım, böylece yeni bir göç ettirmek zorunda kaldım. Aşağıda benim masa, her birinin modelleri ve konsolumdan çıkış çıktığında, bir notun user_id değerini bulmak için bir komut çalıştırıyorum. Ne yaptığımı görebiliyor musun?User_id, raylar derneği üzerinde sıfırdır

şema:

create_table "shouts", force: :cascade do |t| 
    t.string "title" 
    t.text "description" 
    t.integer "user_id" 
    end 

    add_index "shouts", ["user_id"], name: "index_shouts_on_user_id" 

    create_table "users", force: :cascade do |t| 
    t.string "email",   null: false 
    t.string "password_digest", null: false 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "username" 
    end 

Kullanıcı Modeli:

class User < ActiveRecord::Base 
    validates :email, presence: true, uniqueness: true 
    validates :password_digest, presence: true 
    has_many :shouts 
end 

Seslen Modeli:

class Shout < ActiveRecord::Base 
    belongs_to :user 
end 

Seslen Denetleyici:

sınıf ShoutsController < Uy nController

def new 
     @new_shout = Shout.new 
    end 

def create 
    @new_shout = Shout.new(shouts_params) 


    if @new_shout.user_id == nil 
     render new_shout_path 
    elsif @new_shout.save 
     redirect_to dashboard_path 
    else 
     render new_shout_path 
    end 
end 

private 

def shouts_params 
    params.require(:shout).permit(:title, :description, :user_id) 
end 

Bazı test kodu:

> Shout.find(4) 
> #<Shout id: 4, title: "four", description: "four", user_id: nil> 

konsoldan kullanıcı bir örneğini oluşturma, çalışma:

> User.first.shouts.create(title: 'four', description: 'four') 
>[["title", "four"], ["description", "four"], ["user_id", 1] 

Göç dosyası:

class AddUserRefToShouts < ActiveRecord::Migration 
    def change 
    add_reference :shouts, :user, index: true, foreign_key: true 
    end 
end 
+0

Taşıma görünüm ne yapar sevmek? 2) Nerede (herhangi bir yer) bir kullanıcıya bağırıyorsunuz yoksa mesela mı? DB'de varolan sesler var gibi görünüyor, sonra bir geçişte shouts.user_id sütunu ekledi, ancak bu shouts için user_id'de hiçbir zaman doldurulmadı. –

+0

"Not" kaydının nasıl oluşturulduğunu gösterebilir misiniz? Dernek oluşturmanız gerekiyor. Örneğin. user_id öğesini atayan user.shouts.create (başlık: 'four', description: 'four') '. –

+0

@d_ethier 'User.shouts.create ifadesini döndürür (title:' four ', description:' four ') NoMethodError: undefined method 'shouts' için # ' – Jbur43

cevap

0

Yorumlarda önerilen yaklaşımı izlemek istemiyorsanız, birkaç kabul edilemez hacky seçeneğidir (ancak işe yarayacaklardır). User_id öğesini gizli bir alan olarak iletebilirsiniz, böylece param sistemlerine eklenir veya bunu eylemde açıkça belirtebilirsiniz.

Eğer not formu eklenti üzerinde gizli bir alan olarak geçmek istiyorsanız: Eğer oluşturmak eylem işlemek istiyorsanız,

<%= f.hidden_field :user_id, value: current_user.id %> 

Alternatif olarak:

def create 
    @shout = Shout.new(shout_params) 
    @shout.user_id = current_user.id 
    @shout.save 
end 
İlgili konular