2010-11-08 19 views
5

我正在使用我的第一个Rails应用程序(使用Rails 3)取得良好进展。 MVC交互一切都很顺利,但是我不能直接与模型相关的表单。Rails:恢复使用form_tag的非模型表单的内容

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

我喜欢REST风格的对象形式,它自动记住它们提交的值,并在出现错误时以红色突出显示。我很好,没有红色突出显示,但我真的很喜欢它,如果我可以使表单的字段保持提交的值。

任何人都可以建议如何做到这一点?从相关文件

摘录:

视图/ 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 

回答

9

第二ARG到text_field_tag是用来填写字段的值。尝试是这样的:

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

工作很好!谢谢! – AlexC 2010-11-14 22:13:50

1

如果你的领域有一个默认的,你会想从窗体的“秀”动作设置:

# 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' %>