Rails - 使用current_user为表单text_field设置默认值

时间:2014-03-18 00:03:31

标签: ruby-on-rails ruby-on-rails-4

我尝试将联系表单电子邮件字段默认为current_user.email值。如果没有current_user,则应显示一个简单的输入字段。我尝试了下面的工作,但如果没有current_user,则文本字段不显示。

<div class="form-group">
  <label>Email</label> 
  <%= f.text_field :email, required: true, class: 'form-control', value:current_user.email if current_user  %>
</div>

3 个答案:

答案 0 :(得分:12)

它没有显示,因为if语句适用于整个文本字段,而不仅仅是value属性。这将有效:

<% if current_user %>
    <%= f.text_field :email, required: true, class: 'form-control', value:current_user.email  %>
<% else %>
    <%= f.text_field :email, required: true, class: 'form-control'%>
<% end %>

但是,如果你正在使用设计,它会使用一个帮助器方法,通常比current_user更好于用户。我认为你的代码应该是这样的:

<% if user_signed_in? %>
    <%= f.text_field :email, required: true, class: 'form-control', value:current_user.email %>
<% else %>
    <%= f.text_field :email, required: true, class: 'form-control'%>
<% end %>

答案 1 :(得分:3)

http://apidock.com/rails/Object/try

<%= f.text_field :email, required: true, class: 'form-control', value: current_user.try(:email)  %>

答案 2 :(得分:0)

<?php

namespace AppBundle\Entity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * FosUser
 *
 * @ORM\Table(name="fos_user", uniqueConstraints={@ORM\UniqueConstraint(name="UNIQ_957A6479A0D96FBF", columns={"email_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A647992FC23A8", columns={"username_canonical"}), @ORM\UniqueConstraint(name="UNIQ_957A6479C05FB297", columns={"confirmation_token"})}, indexes={@ORM\Index(name="IDX_957A647914013572", columns={"copon_id"})})
 * @ORM\Entity
 */
class FosUser extends BaseUser
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255, nullable=true)
     */
    protected $nom;

    /**
     * @var string
     *
     * @ORM\Column(name="prenom", type="string", length=255, nullable=true)
     */
    protected $prenom;

    /**
     * @var string
     *
     * @ORM\Column(name="tel", type="string", length=30, nullable=true)
     */
    protected $tel;

    /**
     * @var integer
     *
     * @ORM\Column(name="age", type="integer", nullable=false)
     */
    protected $age;

    /**
     * @var string
     *
     * @ORM\Column(name="sexe", type="string", length=255, nullable=true)
     */
    protected $sexe;

    /**
     * @var string
     *
     * @ORM\Column(name="fonction", type="string", length=255, nullable=true)
     */
    protected $fonction;

    /**
     * @var string
     *
     * @ORM\Column(name="address", type="string", length=255, nullable=true)
     */
    protected $address;

    /**
     * @var string
     *
     * @ORM\Column(name="categorie", type="string", length=255, nullable=true)
     */
    protected $categorie;

    /**
     * @var string
     *
     * @ORM\Column(name="type", type="string", length=255, nullable=true)
     */
    protected $type;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="string", length=255, nullable=true)
     */
    protected $description;

    /**
     * @var string
     *
     * @ORM\Column(name="role", type="string", length=255, nullable=true)
     */
    protected $role;

    /**
     * @var \Coupon
     *
     * @ORM\ManyToOne(targetEntity="Coupon")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="copon_id", referencedColumnName="id")
     * })
     */
    protected $copon;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

在旧版本上

<%= f.text_field :email, required: true, class: 'form-control', value: current_user.try(:email)  %>

或者只是

    <%= form.text_field :email, :value=> current_user.try(:email),:class=>"form-control"%>