我有一个向导,保存在3个模型中,所以对于输入我使用了带有text_fields的form_tab,radio_buttons ......除了验证之外它很有效:当我失败时我使用redirect_back fallback_location驱回我的向导...但是我的表格为空白,用户输入以前输入的值。
问题: - 使用form_tag是否可以(我有3个型号而不是简单的录音 - 如何“保存”或放回以前输入的值?谢谢,
格雷格
我的回程循环:
return redirect_to home_wizard_path, notice: @user.errors.full_messages.join(',')
或者,同样的结果:
return redirect_back fallback_location: home_wizard_path, notice: @user.errors.full_messages.join(',')
以我的形式:
<%= form_tag(wizard_post_path, method: :post) do %>
<div class="input-field col s6">
<%= text_field_tag('nom') %>
<%= label_tag('nom', 'Nom') %>
</div>
答案 0 :(得分:1)
我只是试图展示使用Simple_form并为您创建快速表单。请参阅在此简单表单中添加其他标记。
将其添加到您的Gemfile:
gem 'simple_form'
运行以下命令进行安装:
bundle install
运行生成器:
rails generate simple_form:install
在users_controller.rb
中class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.valid?
else
render :new
end
end
private
def user_params
params.require(:user).permit(:user_name)
end
end
在new.html.erb。
<div class="row">
<div class="col-md-6">
<%= simple_form_for @user, class: 'form-horizontal' do |f| %>
<%= f.input :user_name %>
<br/>
<%= f.button :submit %>
<% end %>
</div>
</div>
答案 1 :(得分:1)
如果您的表单与模型直接绑定,则在大多数情况下,最好使用表单助手form_for
。
回答有关重新填充表单和呈现错误的问题。您应该不 redirect_back
,因为这会导致当前值丢失。而是再次渲染相同的页面。这将允许表单访问以前的结果,并用它们填写表单。这在使用form_for
帮助程序时自动发生(如果您更新了模型实例的属性)。
如果您无法使用form_for
帮助程序并使用单独的标记,请不要忘记设置值。 <%= text_field :object_name, :attribute_name, value: object.attribute %>
如果未设置该值,则会生成空文本字段,否则将填充属性值。
有一些助手使表单创建更容易一些。例如Simple Form和Formtastic。 但我至少会建议您首先查看有关表单的Rails指南:Action View Form Helpers
一个很好的例子,是脚手架模型的结果。您最终在控制器中使用以下代码:
class ChairsController < ApplicationController
# ...
def new
@chair = Chair.new
end
def create # I removed the json parts
@chair = Chair.new(chair_params)
if @chair.save
redirect_to @chair, notice: 'Chair was successfully'
else
render :new
end
end
# ...
end
使用chairs/new
视图连接以下行:
<%= form_for @chair do |form| %>
<% if @chair.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@chair.errors.count, "error") %> prohibited this chair from being saved:</h2>
<ul>
<% @chair.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :name %>
<%= form.text_field :name, id: :chair_name %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>