轨道形状问题



有一个布尔字段(使用formtastic),该值不会在错误中持续存在。如果已提交并且存在错误,则在重新加载时,布尔字段会自动检查自身,这是错误的。我可以看出问题在于冲突的值,隐藏的是0,而输入是1。两者都应为0。如何更正此问题,以便最初将两者都设置为0。我哪里错了?

表单代码:

<%= f.input :legal, :as => :boolean %>

Html生成的

<li class="boolean optional" id="user_legal_input">
   <input name="user[legal]" type="hidden" value="0" />
   <label for="user_legal">
      <input id="user_legal" name="user[legal]" type="checkbox" value="1" />I Agree to the legal terms
   </label>
</li>

ADDED:用户(创建)控制器

def create
    @user = User.new(params[:user])
    respond_to do |format|
      if @user.save
        format.js  
      else
        format.js  
      end  
    end
  end

js只是在中重新呈现了包含所有错误的表单

隐藏字段总是设置为"0"以模拟未选中的框,这是正确的行为:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box

相反,我建议您的issue是模型中的访问器方法。

如果@user.legal是true类型,或者更准确地说,如果是

ActionView::Helpers::InstanceTag.check_box_checked?(@user.legal,"1")

评估为true。

现在,如果legal是一个布尔型数据库列,rails初始值设定项会将其转换为ruby布尔型,所以如果您执行

@user = User.new(:legal => "0")

然后

@user.legal == false

但是如果legal不是db列(否则:as => :boolean是不必要的),那么您一定以某种方式定义了一个访问器方法。

如果你用一个简单的attr_accessor来完成,那么

@user.legal == "0"

其正确地评估为未选中的框。

但如果你或你的框架想智胜rails,你定义:

attr_writer :legal
def legal
 !!@legal
end

或者类似的东西(给你一个合适的布尔值),那么你就有麻烦了:

此处初始表单显示!!nil为false=>未选中框。但在提交/重新加载时,CCD_ 3为true=>复选框。

如果我的预感是正确的,请告诉我:)

相关内容

  • 没有找到相关文章

最新更新