这是一个简单的问题。如果表单填写不正确,我会在创建操作中调用render 'new'
,以便此人可以正确填写表单。不幸的是,这会导致丢失URL中的参数。如何将它们与渲染调用一起传递?
答案 0 :(得分:1)
您的操作方法应该获取参数并将其分配给实例变量。此示例中的模型称为note。
def create
@note = Note.new(params[:note])
respond_to do |format|
if @note.save
format.html { redirect_to @note, notice: 'Note was successfully created.' }
else
format.html { render action: "new" }
end
end
end
然后在视图中可以看到实例变量:
<%= form_for(@note) do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
答案 1 :(得分:0)
通常,参数作为表单中的隐藏字段传递,以便您可以在创建操作中从中获取。
答案 2 :(得分:0)
渲染调用应该使用带有“@”的变量(也就是实例变量)。确保#create与#new。具有相同的实例变量。
class ExampleController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.valid?
@user.save
redirect_to "/"
else
render 'new'
end
end
end
答案 3 :(得分:0)
更好的方法是定义它们有隐藏字段并在模型中将隐藏字段声明为attr_accessor,但如果你坚持传递get参数,即使应该只使用post参数,你也可以在表单中写下所有参数行动如:
form_for @event,:url =&gt; events_path +'?getvar = 1'do | f |