def show
@customer = Customer.find(params[:id])
@comment = @customer.comments.build
@id = 0
end
Drugi problem
Czy jest jakas mozliwosc ustawienia zmiennej w podszablonach. Pole do dodawania komentarzy jest podszablonem przez co musialem skopiowac do customers_controller @comment = @customer.comments.build bo inaczej dostaje blad
customers_controller:
def show
@customer = Customer.find(params[:id])
@comment = @customer.comments.build
@id = 0
end
comments_controller:
[code=ruby] def new @customer = Customer.find(params[:customer_id]) @comment = @customer.comments.build
end
def create @customer = Customer.find(params[:customer_id]) @comment = @customer.comments.build(params[:comment])
if @comment.save
redirect_to customer_path(@customer)
end
end[/code]
Pierwszy problem:
Dostajesz dodatkową iterację bo zrobiłeś
@comment = @customer.comments.build
Czyli Twój @customer ma 4 komentarze, przy czym tylko 3 z nich są zapisane w bazie.
Drugi problem:
a) comments/new jest zazwyczaj używane do akcji new w kontrolerze, może lepiej byłoby nazwać partial form albo comment_form?
b) Jeżeli w comments/new masz jakiś form_for, to możesz zrobić
form_for @customer.comments.build do |f|
...
end
co rozwiąże Ci również pierwszy problem, bo nie będziesz potrzebował wymienionej w problemie 1 linijki kodu.