我的第一个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
答案 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' %>