我需要在页面上显示“我接受服务条款”复选框,必须进行检查以便订单继续进行。因此,在数据库中有一列与此匹配似乎是不合逻辑的(无论用户是否接受或拒绝了条款)。
我在我的视图中使用这样的表单助手:
<%= check_box("client", "terms") %>
在我的模特中:
validates_acceptance_of :terms
目前它根本不起作用。
这似乎是一个非常常见的代码片段,但我无法在没有模型中的条款的情况下在任何地方使用它。否则我可以使用javascript来验证它,但更愿意将它保留在模型中。
答案 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) %>