无法从form_for转换为form_tag

时间:2012-05-14 09:08:18

标签: ruby-on-rails form-for

如何将此转换为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>

但它根本没有显示表格。

由于

3 个答案:

答案 0 :(得分:2)

您需要添加一个等号:

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

但是,我想知道你为什么要切换到form_tagform_for在我看来有许多优点,例如:表单构建器。

答案 1 :(得分:0)

我也在尝试转换为form_tag。

更正语法

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

语法不正确

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

您需要在开始的embed标记中添加'=',将方法更改为:方法,然后:发布到'post'

使用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

答案 2 :(得分: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>