使用 erb 保存 HTML 表单字段值

Persist HTML form field value using erb

我在使用 erb 设置 HTML 表单字段的值时遇到问题。场景是用户输入了无效密码——我不希望他们必须重新输入 name/email-address/etc,因此这些应该保留在适当的表单字段中。

我正在使用 erb 来执行此操作,如下所示:

#app.rb
post '/new-user' do
    @user = User.new({params})
    if @user.save # <-- this will fail if user info is invalid
      session[:user_id] = @user.id
      redirect '/chitter-newsfeed'
    else
      flash.now[:notice] = 'Password and confirmation password do not match'
      erb :sign_up
    end
  end

#sign_up.erb
<form action="/new-user" method="post" >
  Name:
  <input type="text" name="real_name" value=<%=@user.real_name%> ><br>
  User Name:
  <input type="text" name="user_name" value=<%=@user.user_name%> ><br>
etc.

我的问题是代码只填充 HTML 字段直到第一个 space 在任何字符串 erb 给它。例如如果 @user.real_name"Foo Bar Baz",则只有 "Foo" 会出现在 "real_name" 输入字段中。

经过测试,@user.real_name 没有被破坏——它仍然设置为 "Foo Bar Baz",即使在表单呈现之后。如果我对表单字段的值进行硬编码,它可以呈现一个带有 spaces 的名称。这与 erb 和 HTML 之间的相互作用有关。知道问题出在哪里吗?

只需在属性周围添加引号:

Name:
<input type="text" name="real_name" value="<%= @user.real_name %>"><br>
User Name:
<input type="text" name="user_name" value="<%= @user.user_name %>"><br>