2016-11-16 73 views
0

从我的理解,空表单字段保存到数据库通常默认为零(这是我想要的)。但是我的两个可选表单字段保存为空(“”)而不是零。Rails:表单字段保存到数据库默认为空而不是零

我不确定这是为什么,我看过:Understanding Rails validation: what does allow_blank do?Save blank value as nil in database认为这可能是因为我使用的是allow_blank: true

我group.rb

# meetup_urlname must be unique 
validates :meetup_urlname, uniqueness: { case_sensitive: false, message: "this is already being used by a different group" }, allow_blank: true 


# only validate if meetup_apikey or if meetup_urlname is non-empty 
validate :url_name_valid?, :if => :meetup_urlname? 
validate :api_key_valid?, :if => :meetup_apikey? 

_Form.html.erb:

<%= bootstrap_form_for(@group, :html => { :multipart => true }, layout: :horizontal, label_col: "col-sm-3", control_col: "col-sm-9") do |f| %> 
... 
    <h5>Import Events from Meetup</h5> 

    <div class="field"> 
    <%= f.text_field :meetup_urlname, label: "Meetup Group's URL", type: "text", placeholder: "Enter your Meetup group's url to retrieve your events", prepend: 'http://www.meetup.com/' %> 
    </div> 

    <div class="field"> 
    <%= f.text_field :meetup_apikey, label: 'Meetup API Key', placeholder: 'Enter your Meetup API key (Required for advanced meetup functionality)' %> 
    </div> 

<%= f.hidden_field :status %> 
<%= f.hidden_field :audit_status %> 
<%= f.hidden_field :sref %> 

<div class="col-sm-10" style="padding-right: 26px;"> 
    <div class="actions pull-right"> 
    <%= f.submit 'Update Group', class: "action-btn btn-rounded btn-large" %> 
    </div> 
</div> 

<% end %> 

有没有办法有可选的表单字段保存为无,而不是空的默认?目前有一个黑客在哪里如果表单域返回空...它会覆盖为零。

任何反馈意见或见解将有所帮助。谢谢!

+0

你为什么让空白?通常情况下,这是禁用,以避免这个问题。 – tadman

+0

@tadman,对不起,我想这是我想添加可选表单字段的一种方式,但如果在表单字段中输入了内容,仍然有验证。我不知道我是否可以使用别的东西来允许该字段是可选的。将if语句传递给'validates:meetup_urlname'会更好吗? – teresa

+0

如果需要,您可以随时在验证程序本身内部推送'if'逻辑。 if语句通常更适合那些没有相关方法的人,比如'validates ...,presence:true,如果:...' – tadman

回答

0

strip_attributes宝石可以为你照顾这件事。

https://github.com/rmm5t/strip_attributes

+0

这个宝石似乎对我有效,但它也会其他事情,我不能确定它是否会在其他地方打破我的应用程序。是否有另一种方式写在可选的表单域中,只有当条件满足时才会生效?谢谢。 – teresa

0

请问您可以发布更多的上下文吗?

与我们现在看到,我的想法是:

  1. ""来自某处视图(请贴好)
  2. 也许你会呼吁:meetup_urlname某处to_snil.to_s将在红宝石中返回""
+0

这很有趣..我认为这可能是它为什么保存为空的原因。我从视图中发布了我的'_form.html.erb',但是我没有看到它的问题。没有在任何地方的'meetup_urlname'或'meetup_apikey'上调用'to_s'。 – teresa

相关问题