2009-06-05 13 views
11

Jestem nowy w rubinach na szynach i pracuję z wersją 2.3 na mac osx. Próbuję utworzyć tę samą funkcjonalność, którą tworzy rusztowanie, ale na własną rękę. Stworzyłem kontroler "post", widok i model. kontroler post, mam następujący:Zmienna instancji a symbol w ruby ​​na szynach (forma_for)

class PostController < ApplicationController 
    def index 
    end 

    def new 
    @post = Post.new 
    end 
end 

w new.html.erb, mam następujący:

<h1>New Post</h1> 

<% form_for :post do |f| %> 

    <%= f.text_field :title %> 

<% end %> 

zauważyłem, że w rusztowaniu wygenerowany kod, wykorzystanie zmiennej instancji @post dla pomocnika form_for. dlaczego używają zmiennej instancji w wygenerowanej formie szkieletu, jeśli przekazanie symbolu: post w form_for robi dokładnie to samo, podczas gdy symbol wymaga zmiany konfiguracji tras?

bardzo dziękuję, yuval

Odpowiedz

15

jeśli używasz symbolu: zakładać tworzy

<form action="/posts" method="post"> 

jeśli używasz instancji @post

dla @post = Post.new dostaniesz

<form action="/posts/create" class="new_account" id="new_account" method="post"> 

dla @post = Post.find (1) otrzymasz

<form action="/posts/update" class="edit_account" id="edit_account_1" method="post"> 
<input name="_method" type="hidden" value="put"> 

jeśli masz różne formularze do nowej edycji, a twoja edycja jest wielka, ale bardziej podobna do nowej, a twoje formularze edycyjne będą identyczne lub bliskie

, więc jeśli używasz zmiennej instancji @post, możesz umieść cały kod formularza w _form i po prostu wywołaj częściowe, a zajmie się resztą na podstawie, jeśli przekażesz nowy rekord lub istniejący rekord

+0

dziękuję bardzo. to wyjaśnia. :) –

+3

Znaczenie tego ukrytego _method polega na tym, że przeglądarki nie obsługują metod put i delete, więc musisz powiadomić aplikację, gdy metoda post ma być put lub delete, na szczęście szyny magicznie obsługują to dla nas – ErsatzRyan

+0

Musisz użyć @post na nowym formularzu, a potrzebujesz go, nawet jeśli twoje formularze są oddzielne. W przeciwnym razie, gdy utworzysz nowy wpis z nieprawidłowymi danymi i wróci do nowego formularza z błędami sprawdzania poprawności, nie wypełni on wprowadzonych informacji. –

0

Jedną z możliwych przyczyn jest to, że sprawia, że ​​kod dla formularza w celu utworzenia nowego stanowiska bardziej podobny do kodu w formie aktualizacji istniejącego stanowiska.

+0

dziękuję za odpowiedź –

Powiązane problemy