2016-02-28 62 views
3

我寫了下面的代碼: -form_for如何決定爲特定請求採取何種操作?

<%= form_for(:session,url: login_path) do |f| %> 

其被記到

<form action="/login" accept-charset="UTF-8" method="post"> 

的routes.rb文件包含以下代碼: -

root 'static_pages#home' 
get 'contact'=>'static_pages#contact' 
get 'about'=>'static_pages#about' 
get 'help' => 'static_pages#help' 
get 'signup' => 'users#new' 
get 'login' => 'sessions#new' 
post 'login' => 'session#create' 
delete 'logout' => 'session#destroy' 
resources:users 

我想知道form_for的動作是如何決定的?

+0

什麼是'@ user'這裏?同時用'routes.rb'代碼更新你的問題 – Pavan

+0

我已經更新了一下我的代碼,並提供了routes.rb代碼。 –

回答

1

請查閱Rails表單助手指南,特別是關於dealing with model objects.的部分。另請參閱form_for的docs

你的問題,在

<form action="/login" accept-charset="UTF-8" method="post"> 
     ^^^^^^^^^^^^^^^ 
      this bit 

從你傳遞給form_for幫手

<%= form_for(:session, url: login_path) do |f| %> 
       ^^^^^^^^ 
       here 

隨着你(可選)傳遞到URL的對象的組合來form_for幫手

<%= form_for(:session, url: login_path) do |f| %> 
         ^^^^^^^^^^^^^^^ 
           here 

As Joe Half Face在他的回答中暗示,:sessionsymbol,所以form_for解決login_path簡單地到action="/login"

如果:session,相反,一直是個實例變量(讓我們設想你有一個Session類,並像@session一個實例變量),那麼你的form_for通話可能看起來是這樣的:

<%= form_for(@session, url: login_path) do |f| %> 

然後form_for根據@session對象的狀態(是新記錄還是已保存的記錄等),將不同地解決action=

順便說一句,form_for確實不需要url論點。因此,它的好做:

<%= form_for(@user) do |f| %> 

在這種情況下,form_for使用提供@user對象來推斷正確的路徑,你會得到

<form action="/users" ... > 
0

如果@user不堅持它推你update行動

如果不堅持 - 以create

,但你可以自己配置form_for

form_for @user, url: {action: "create"} 
2

這裏,你不指定實例對象(@model_name),它只是將表單路徑分配給您提供的路徑:login_path,只輸出「/ login」的方法。

有兩條路線

get 'login' => 'sessions#new' 
post 'login' => 'session#create' 

但是作爲默認的form_for HTTP動詞會後,導軌和'login' => 'session#create'傳入POST請求匹配。

方法login_path是您提供的字符串'login',除非你指定其他類似崗位'login' => 'session#create', as: "sign_in"的東西,它會做sing_in_path定義汽車。

它是Rails向後元編程的一部分。

+0

感謝您** Joe Half Face **,但仍然存在疑問,如果routes.rb文件相同,代碼如下所示: - <%= form_for(@user)do | f | %> **我看到的是,這段代碼被轉換爲** action =「/ users」,只是想知道在這種情況下如何在沒有提供路徑的情況下使用form_for來確定要執行的操作。這裏@user是數據庫模型對象,基本上這個表單用於創建註冊頁面。 –

相關問題