Problem z zapisem do bazy

Witam

Rozpocząłem właśnie moją przygodę z Rails-ami.

Piszę właśnie własną pierwszą aplikacją i jestem jak na razie pod wrażeniem frameworku.

Mam taki problem:

W kontrolerze main mam metodę o nazwie create, która służy do zapisania komentarza pod newsem.

[code] def comment

@post = Post.find(params[:id])
@id = params[:id]

end

def create
@p = Post.find(params[:id])

c = Comment.new
c.author = params[:author][:author]
c.content = params[:content][:content]

@p.comment << c
@p.save

render :controller => "main", :action => "comment", :id => params[:id]

end[/code]
Jak widać szukam posta następnie tworzę obiekt komentarza i dopisuję go do tablicy. Następnie zapisuję. Później chcę aby wyświetliła się strona gdzie wypisuję pojedynczy news z komentarzami -> metoda comment

Jednak wywala mi błąd jak kliknę zapisz w form i po przejściu do create:

Showing app/views/main/comment.html.erb where line #1 raised:

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.title

Extracted source (around line #1):

1:

<%= @post.title %>


2:
3:
4: <%= @post.date %>

Wydaje mi się jakby po przejściu do comment nie wywołało się nic w kontrolerze comment. Wydaje mi się że: render :controller => “main”, :action => “comment”, :id => params[:id] zrobi to samo jakbyśmy wywołali /main/comment/1 czyli wykona wszystko co jest w kontrolerze czyli znajdzie posta a następnie przejdzie do widoku i go wyświetli. Chyba że się mylę. Może być też tak że nic nie znajdzie @post = Post.find(params[:id]), ale przecież wysyłam id.

oto widok:

[code]

<%= @post.title %>

<%= @post.date %>

<%= @post.content %>

<%= form_tag(’/main/create/’ + @id) %>
Author: <%= text_field “author”, “author”%>

Text: <%= text_field “content”, “content”%>

<%= submit_tag %>



<% for c in @post.comment %>

<%= c.author %>

<%= c.content %>

<% end %>[/code]
Dzięki za pomoc

zgaduję w sumie, ale może spróbój zamienic @p na @post w metodzie create

Właśnie próbowałem. Ale przecież on powinien wykonać kod kontrolera comment zaraz po kodzie create i wstawić do widoku comment

zamiast render spróbuj

redirect_to(@post) (albo @p zależy jak masz w kodzie)
ps. comment to nie kontroler tylko metoda kontrolera, kontroler to cala klasa PostsController

Dobra już wiem ale bez Waszej pomocy się nie obejdzie.

Doszedłem do tego że id się nie przekazuje do comment.

render :controller => “main”, :action => “comment”, :id => params[:id]

Powyższa linijka nie daje w efekcie tego jak byśmy wywołali /main/comment/1. To jak sprawić aby id pojawiło się w kontrolerze comment i było możliwe prawidłowe pobranie danych.?

Warto popatrzec w logi log/development.log tam masz każdy request i jego parametry

Ok już sobie poradziłem :smiley:

redirect_to :action => “comment”, :id => params[:id]

i śmiga

Dzięki za Pomoc :slight_smile: