在我们的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?
感谢您的帮助。
答案 0 :(得分:0)
因为,我知道您希望新方法可用的某些值或创建失败后呈现的页面。
我假设您的create方法中必须包含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
并且,您想要的值将以渲染的形式提供。
更好的是,您将该代码转移到之前的过滤器或其他内容,这使得这些值可用于这两个方法(new和create)。