Domanda

Sto avendo un po 'di problemi con la mia applicazione Rails. E 'breve, la sua un'applicazione di social networking dove gli utenti hanno un profilo, avere osservazioni, e possono commentare osservazioni.

I miei percorsi sono i seguenti:

map.connect '/:username', :controller => 'users', :action => 'show'  
map.connect '/:username/:id', :controller => 'submissions', :action => 'show'

Così, quando si sta visualizzando una sottomissione l'URL sembra qualcosa di simile:

  

http://www.example.com/users_username/2342

Il numero è il numero id della categoria. Fin qui tutto bene. Dove Sono in esecuzione nei guai è quando si tenta di inviare un commento relativo alla trasmissione. C'è un modulo per la presentazione delle osservazioni su ogni pagina di presentazione che assomiglia a questo:

<% form_for Comment.new do |f| %>  
    <%= f.text_area :message %>  
    <%= f.submit "Submit", :disable_with => 'Submitting...' %>  
<% end %>  

e il controller è simile al seguente:

def create
    submission = Submission.find(params[:id])
    comment = cat.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

Ora ogni volta che provo a fare un commento presentazione Rotaie rendimenti:

ActiveRecord::RecordNotFound in CommentsController#create Couldn't find Submission without an ID or undefined method `answers' for nil:NilClass  

rotaie in fondo non sta tirando il: id dall'URL con params e non so perché. La pagina di presentazione viene visualizzato correttamente per ogni ID nell'URL, quindi non capisco perché la sua non tirandolo per questa forma. Se nomino l'id in modo esplicito (IE Submission.find (2345)) funziona perfettamente ... così che cosa mi manca? Sto solo di essere stupido?

I miei rapporti sono impostati correttamente pure.

Grazie in anticipo.

È stato utile?

Soluzione

La seguente porzione di codice genera un modulo che invia al controllore comments:

<% form_for Comment.new do |f| %> 

Credo che si deve passare la presentazione id poi all'interno del modulo:

<%=hidden_field_tag(:submission_id, @submission.id)%>

E dentro il controller commenti devi grap che id:

def create
    submission = Submission.find(params[:submission_id])
    comment = submission.comments.create(params[:comment])
    comment.created_at = Time.now
    comment.save
    redirect_to submission
end

Questo dovrebbe risolvere, però vi consiglio di fare risorse nidificate come una seconda fase .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top