2012-05-14 86 views
1

如何將其轉換爲form_tag?這段代碼基本上是從回報率教程由邁克爾·哈特爾第8章練習1將form_for轉換爲form_tag的麻煩

<% provide(:title, "Sign in") %> 
<h1>Sign in</h1> 

<div class="row"> 
    <div class="span6 offset3"> 
    <%= form_for(:session, url: sessions_path) do |f| %> 

     <%= f.label :email %> 
     <%= f.text_field :email %> 

     <%= f.label :password %> 
     <%= f.password_field :password %> 

     <%= f.submit "Sign in", class: "btn btn-large btn-primary" %> 
    <% end %> 

    <p>New user? <%= link_to "Sign up now!", signup_path %></p> 
    </div> 
</div> 

我想是這樣的

<% provide(:title, "Sign in") %> 
<h1>Sign in</h1> 

<div class="row"> 
    <div class="span6 offset3"> 
    <% form_tag sessions_path, methods=> :post do %> 
     <%= label_tag 'email' %><br /> 
     <%= text_field_tag :email, params[:email], :placeholder => "Email" %> 

     <%= label_tag 'password' %><br /> 
     <%= password_field_tag :password %> 

     <%= submit_tag 'Sign in' %> 
    <% end -%> 
    <p>New user? <%= link_to "Sign up now!", signup_path %></p> 
    </div> 
</div> 

但它不顯示形式的。

感謝

回答

2

您需要添加一個等號:

<%= form_tag sessions_path, methods=> :post do %> 

不過,我不知道爲什麼你要切換到form_tag。在我看來,form_for有很多優點,例如表單構建器。

+0

哦確定。那很好。因爲這只是一個練習。感謝您的意見,我會堅持form_for :) – user1372829

+0

好吧。只是想補充一點,當你在form_tag方法的開頭添加等號時,它應該至少顯示一些東西。這是在Rails 3中做出的改變。在Rails 2中,這也應該沒有等號。如果我完全回答了您的問題,您能否將此答案標記爲已接受?謝謝! :) – flooooo

+0

謝謝!剛剛做到了。 – user1372829

0

我也試圖轉換爲form_tag。

正確的語法

<%= form_tag sessions_path, :method => 'post' do %> 

不正確的語法

<% form_tag sessions_path, methods=> :post do %> 

您需要添加一個 '=' 開口嵌入標籤,更改方法:方法,並張貼到 '後'

使用form_for vs form_tag的原因在另一個堆棧溢出線程中討論。

需要做的另一個更改是在sessions_controller.rb中。傳回的散列不會被控制器識別,因爲它設置爲接受來自form_for方法的散列。您必須在兩行中刪除第一個[:session]哈希。你sessions_controller.rb應該是這樣的,

def create 
    user = User.find_by(email: params[:email].downcase) 
    if user && user.authenticate(params[:password]) 
     sign_in user 
     redirect_to user 
    else 
     flash.now[:error] = 'Invalid email/password combination' 
     render 'new' 
    end 
end 
0

下一個將是教程(邁克爾·哈特爾3.2)第8章的代碼。練習1

<% provide(:title, "Sign in") %> 
<h1>Sign in</h1> 

<div class="row"> 
    <div class="span6 offset3"> 

     <%= form_tag sessions_path, :method => 'post' do %> 
      <%= label_tag 'email', 'Email' %> 
      <%= text_field_tag :email, params[:email], :placeholder => "Email" %> 
      <%= label_tag 'password', 'Password' %> 
     <%= password_field_tag :password %> 
     <br> 
     <%= submit_tag "Sign In" , :class=> "btn btn-large btn-primary" %> 
    <% end %> 
    <p>New user? <%= link_to "Sign up now!", signup_path %></p> 
</div>