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

use*_*092 8 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>
Run Code Online (Sandbox Code Playgroud)

Phi*_*899 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 %>
Run Code Online (Sandbox Code Playgroud)

但是,如果你正在使用设计,它会使用一个帮助器方法,通常比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 %>
Run Code Online (Sandbox Code Playgroud)


shw*_*eta 5

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

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