Rails 不会在发布时出错时填充动态生成的字段



在我们的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)可以使用这些值。

相关内容

  • 没有找到相关文章

最新更新