2010-12-22 12 views
2

eine Bewertung Tabelle Mit:Rails 3: Erstellen Sie eine Instanz mit 3 Fremdschlüsseln

# Table name: reviews 
# 
# id   :integer   not null, primary key 
# wsp_id  :integer 
# service_id :integer 
# user_id  :integer 
# description :text 
# rating  :integer 
# created_at :datetime 
# updated_at :datetime 
# 

    belongs_to :wsp 
    belongs_to :service 
    belongs_to :user 

Wie kann ich einen Beitrag für einen Dienst zu erstellen und die wsp_id passieren und user_id? Muss ich verschachtelte Routen verwenden?

Ich kann @user.reviews.new(params[:review]) tun, aber ich bin nicht in der Lage, die wsp_id und die service_id zu übergeben.

Hier ist meine Bewertungen Controller erstellen.

def create 
    @review = current_user.reviews.new(params[:review]) 

    if @review.save 
     #Saved 
    else 
     #Error, not saved 
    end 
    end 

Was mache ich falsch?

Vielen Dank!

Antwort

0

routes.rb

resources :services do 
    resources :review 
end 

resources :review, :only => [:create] 

Auf diese Weise können Sie die Überprüfung unabhängig ohne Verschachtelung erstellen. Es gibt keine Notwendigkeit, Daten in Ihrem Formular zu lesen und es irgendwie in die Action-URL stopfen :) Das ist hässlich, aber Sie könnten es mit Javascript tun, aber es ist im Grunde yucky.

Ihrer Ansicht

= form_for(review) do |f| 
    = f.collection_select :service, Service.all 
    = ..more model fields.. 
0

Haben Sie versucht, die Parameter zu verschachteln (z. B. params[:review][:service_id]) und dann params[:review] zu übergeben?

+0

Wie erhalte ich: service_id, wenn die Routen sind nicht verschachtelt? – donald

+1

@donald, Routen (oder verschachtelte Routen) sind nicht die einzige Möglichkeit, Daten zu erhalten. Sie könnten zum Beispiel die wsp_id und die service_id aus der Sitzung abrufen und diese vor dem Erstellungsaufruf in der create-Aktion in die Parameter zusammenführen. Sie müssen die Werte von service_id oder wsp_id von irgendwo in der Anwendung ermitteln, und nur Sie würden das wissen. –

+0

@Aditya Können Sie mir bitte erklären, welchen anderen Weg ich benutzen kann? Danke – donald

0

Ich Art von neuen auch zu den Schienen ... aber hoffentlich diese Hilfe. dies wird Ihren Fremdschlüssel zu Ihrem Modell hinzufügen mit all Routen zu ändern Dateien

def new 
    @anime = Anime.new 
    user_id = session[:user_id] 
end 

def create 
    @anime = Anime.new(params[:anime]) 
    @anime.user_id = session[:user_id] 
end