2014-02-03 3 views
1

Ok, у меня есть это в моей _form.html.erbПользовательская проверка для checkbox_box_tag

<div class "field"> 
    <%= label_tag "What days of the week do you want to work with us? (maximum of three days)" %> 
    <span>What days of the week do you want to work with us? (maximum of three days)</span><br /> 
    <%= check_box_tag 'days_of_week[]', "Monday" %> Monday 
    <%= check_box_tag 'days_of_week[]', "Tuesday" %> Tuesday 
    <%= check_box_tag 'days_of_week[]', "Wednesday" %> Wednesday 
    <%= check_box_tag 'days_of_week[]', "Thursday" %> Thursday 
    <%= check_box_tag 'days_of_week[]', "Friday" %> Friday 
    <%= check_box_tag 'days_of_week[]', "Saturday" %> Saturday 
    <%= check_box_tag 'days_of_week[]', "Sunday" %> Sunday 
    </div> 

Как написать пользовательскую проверку для того, чтобы убедиться, что человек делает проверить три или меньше?

Вот немного фона, что немного усложняет его. Посмотрите на код ниже, см. @new_partnership? это не часть этого ... он появляется в параметрах, но не в параметрах new_partnership.

просто хотел объяснить это.

 <%= form_for(@new_partnership) do |f| %> 
      <% if @new_partnership.errors.any? %> 
      <div id="error_explanation"> 
      <h2><%= pluralize(@new_partnership.errors.count, "error") %> prohibited this new_partnership from being saved:</h2> 

      <ul> 
      <% @new_partnership.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
       <% end %> 
      </ul> 
      </div> 
     <% end %> 

Пожалуйста, дайте мне знать, если есть дополнительная информация, которую я должен дать.

EDIT 1

Кроме того, прежде чем кто предлагает JQuery, и т.д. ... есть способ проверить это только в ROR без необходимости прибегать к нему?

Вы знаете, что-то вроде этого: validates :days_of_week, :presence => { :message => "Must check three or less" }

две проблемы из вышеприведенного утверждения, является то, что ROR говорит, что DAYS_OF_WEEK не определен метод (очевидно, так как это пользовательский тег) и во-вторых, это не на самом деле проверьте, были ли отмечены 3 или менее флажка.

ответ

1

Вы всегда можете построить в свободной форме валидаторы с validates_each:

validates_each :days_of_week do |record, attr, value| 
    record.errors.add attr, ' must have 3 or fewer checked.' if value.length > 3; 
end 

Обратите внимание, что для этой работы ваша модель должна быть в состоянии использовать атрибут массива многозначных, который, вероятно, требует специальных аксессоров.

То, что вы написали в «фоновой» части вашего вопроса, ничем не показывает, насколько я могу судить.

+0

hm, другими словами, (pardon my neorance btw) Мне нужно сделать переход, чтобы добавить accessor для days_of_weeks, так как он не является частью массива параметров new_partnership? это то, что вы имели в виду? – user273072545345

+0

также часть «фона» должна была показать, что days_of_week не был частью массива new_partnership, так как это собственный собственный тег. просто хотел прояснить это. извините, я новичок в рубине на рельсах и не совсем уверен, что важно, а что нет. – user273072545345

+0

Ваши флажки представлены массивом переменной длины в 'params'. Rails ActiveRecord сам по себе не относится к атрибутам, зависящим от массива. Вам нужно будет определить свой собственный способ кодирования дней недели в поле базы данных и реализовать их в аксессуарах. – Gene

Смежные вопросы