复选框的条款和条件,没有数据库中的列

时间:2010-02-10 21:16:19

标签: ruby-on-rails ruby

我需要在页面上显示“我接受服务条款”复选框,必须进行检查以便订单继续进行。因此,在数据库中有一列与此匹配似乎是不合逻辑的(无论用户是否接受或拒绝了条款)。

我在我的视图中使用这样的表单助手:

<%= check_box("client", "terms") %>

在我的模特中:

validates_acceptance_of :terms

目前它根本不起作用。

这似乎是一个非常常见的代码片段,但我无法在没有模型中的条款的情况下在任何地方使用它。否则我可以使用javascript来验证它,但更愿意将它保留在模型中。

5 个答案:

答案 0 :(得分:14)

这应该可以正常工作,没有数据库列或attr_accessor: http://guides.rubyonrails.org/active_record_validations.html#acceptance

我倾向于检查你的params散列应该是什么,即'terms'属性是在'client'散列中传递的,也许尝试在你的控制器上添加raise params.inspect创建动作来帮助你调试?

答案 1 :(得分:5)

如果您的客户端模型中有attr_accessor :terms呢?

答案 2 :(得分:1)

attr_accessor:条款可以很好地解决问题。

答案 3 :(得分:0)

要么使用@ neutrino的解决方案,要么重置:如果您需要重新显示表单(因为验证可能会失败),条款将被“不接受”,请使用:

def terms
  nil
end

def terms=(val)
  # do nothing
end

答案 4 :(得分:0)

我使用了这些设置:

controller中,我添加了:terms_of_service作为允许字段:

def application_params
  params.require(:application).permit(. . . , :terms_of_service)
end

model

attr_accessor :terms_of_service
validates :terms_of_service, :acceptance => true

view

<%= f.check_box("terms_of_service", :checked => false) %>