Witam chciał bym przenieść za pomocą render partial _form z jednego widoku do drugiego
ale cały czas otrzymuję First argument in form cannot contain nil or be empty
Prawdopodobnie w tej drugiej akcji nie ustawiasz zmiennej instancji przekazywanej do form_for
.
a) Pokaż coś kodu
b) Pewnie masz coś w stylu form_for @page
a pod Twoją zmienną @page
jest nil
. Tak by sugerował komunikat
c) http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html
wiesz bardziej jest to błąd render partial niż @page bo jak wejdę bez przekierowania na stronę new.html.erb to jest oki poprostu chciał bym mieć tego _form na home index
ścieżka _form books/books/_form.html.erb
Nie wiem, czy przeczytałeś odpowiedź dokładnie - właśnie dlatego masz błąd, że nie ustawiasz (najprawdopodobniej, bo żadnego kodu nie pokazałeś, więc trochę magiczna kula) zmiennej instancji przekazywanej do form_for
w akcji home#index
.
app/views/books/_form.html.erb:
<%= form_for(@book) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<% end %>
controller books
def new
@book = Book.new
end
def create
@book = Book.new(book_params)
if @book.save
redirect_to root_path, notice: t('.created')
else
render :new
end
end
home/index.html.erb
<%= render :partial => 'books/form', :locals => { book: => @book }
Dokładnie tak jak było pisane. Nie ustawiasz zmiennej instancji @book
w akcji index
. Ustaw, a powinno działać. Aha, i jeśli ustawisz zmienną instancji, to nie potrzebujesz locals: {book: @book}
(w dodatku, masz w tym fragmencie syntax error). Partial przecież korzysta ze zmiennej instancji @book
.
Co masz na myśli przez zmienną instancję ?
Zmienną instancji. @book
to zmienna instancji (ma pojedyńcze @
na początku swojej nazwy). To absolutne podstawy, bez których ani rusz, więc polecam doczytać o zmiennych instancji w Rubym i ew. o tym, jak zmienne instancji ustawiane w kontrolerze wykorzystywane są później w widoku.
Inna sprawa że render w widokach domyślnie szuka partiali, więc wystarczy samo render 'books/form'