在我们的rails应用程序中,我们有一个页面,在提交时我们将数据保存在db中。在这个页面上,我们有一些动态生成的字段,我看到在页面重新加载时出现验证错误的情况下,它不会用发布时存在的值填充这些字段。
在控制器中,我们定义了以下方法来填充它:
def build_my_registration_type_memberships
@memberships = []
ListCache.my_registration_types.each do |my_registration_type|
@memberships << MyRegistrationTypeMembership.find_or_initialize_by_my_id_and_my_registration_type_id( @my.id, my_registration_type.id )
end end
在上面的方法中,当我的注册在编辑/查看模式下打开时,它显示了使用这个@membership方法的值。但在张贴错误的情况下,它不会重新加载这与正确的信息。所以我的问题是如何在发布错误的情况下重新填充@membership ?
因此,我理解您希望新方法或创建失败后呈现的页面可用一些值。
我认为你必须有respond_to块在你的创建方法。你在做这个:
def create
...
respond_to do |format|
if @patient.save
format.html { redirect_to @object, :notice => "Object was successfully saved." }
format.xml { render :xml => @object, :status => :created, :location => @object }
else
format.html { render :action => :new }
format.xml { render :xml => @patient.errors, :status => :unprocessable_entity }
end
end
end
您可以注意到,在else部分中,新操作只是呈现。使用一些模板,视图就被交付了。现在,您只需在else部分中执行您在新操作中所做的任何操作以使这些值可用。def create
...
respond_to do |format|
if @patient.save
format.html { redirect_to @object, :notice => "Object was successfully saved." }
format.xml { render :xml => @object, :status => :created, :location => @object }
else
format.html {
@memberships = []
ListCache.my_registration_types.each do |my_registration_type|
@memberships << MyRegistrationTypeMembership.find_or_initialize_by_my_id_and_my_registration_type_id( @my.id, my_registration_type.id )
end
render :action => :new
}
format.xml { render :xml => @patient.errors, :status => :unprocessable_entity }
end
end
end
并且,您想要的值将在呈现的表单中可用。
更好的是,您将代码移动到before过滤器或其他地方,这使得这两个方法(new和create)可以使用这些值。