1

如何将其转换为 form_tag?这段代码基本上来自 Michael Hartl 的 RoR 教程第 8 章练习 1

<% 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>

但它根本不显示表格。

谢谢

4

3 回答 3

2

您需要添加一个等号:

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

但是,我想知道您为什么要切换到form_tag. form_for在我看来有很多优点,例如表单生成器。

于 2012-05-14T11:02:44.273 回答
0

我也在尝试转换为 form_tag。

正确的语法

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

语法错误

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

您需要在开始嵌入标签中添加一个“=”,将方法更改为 :method,并将 :post 更改为 'post'

使用form_for 与 form_tag的原因在另一个堆栈溢出线程中讨论。

需要进行的另一个更改是在 sessions_controller.rb 中。控制器无法识别传回的哈希,因为它被设置为接受来自 form_for 方法的哈希。您必须删除两行中的第一个 [:session] 哈希。你的 session_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
于 2013-06-26T19:13:01.560 回答
0

接下来是教程 (Michael Hartl 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>

于 2014-03-17T19:26:40.190 回答