Rails:恢复使用form_tag的非模型表单的内容

时间:2010-11-08 23:54:30

标签: ruby-on-rails forms error-handling restore

我的第一个Rails应用程序(使用Rails 3)取得了很好的进展。 MVC交互一切都很好,但是我对一个与模型没有直接关系的表单有困难。

我正在使用form_tag,并且在成功的情况下,一切都表现良好。但是,处理错误有点不友好。实际的错误消息存储在flash中并通过layouts / application.html正常显示,但是我真的很喜欢它,如果表单可以记住用户刚刚填写的内容。但它不会:所有字段重置为默认值。

我喜欢对对象的RESTful操作表单的方式自动记住他们提交的值,如果有错误则以红色突出显示。没有红色突出显示我很好,但如果我能让表单的字段保留提交的值,我真的很喜欢。

有人可以建议怎么做吗?

摘录相关文件:

视图/ cardsets / import.html.erb:

<%= form_tag :action => :import_data, :id => @cardset do %>
  ...
  <%= text_field_tag "separator", "", :maxlength => 1 %>
  ...
  <%= text_field_tag "formatting_line" %>
  ...etc (more fields)

控制器/ cardsets_controller.rb:

# POST /cardsets/1/import_data
def import_data
  success, message = @cardset.import_data(params, current_user)
  if success
    redirect_to(@cardset, :notice => message)
  else
    flash.now[:error] = message
    render :import
  end
end

2 个答案:

答案 0 :(得分:9)

text_field_tag的第二个参数是用字段填写的值。尝试这样的事情:

  <%= text_field_tag "separator", params[:separator], :maxlength => 1 %>

答案 1 :(得分:1)

如果您的字段有默认值,则需要在&#34; show&#34;中设置它。表格的行动:

# GET
def show_form
  params[:key] = 'default'
end

# POST
def validate_form_and_act
  # Don't set it here to reuse what the user passed.
end

或直接在模板上(不太好,因为每次使用||并添加更多控制器数据来查看):

 <%= text_field_tag 'name', params[:key] || 'default' %>