Rails / Formtastic - Проверка не происходит - PullRequest
2 голосов
/ 11 июня 2011

Я использую formtastic для проверки форм:

<%= semantic_form_for @user do |f| %>
  <ul class="formItem">         
    <%= f.input :username, :required => true, :label => "Your Username", :input_html => { :class => 'double' } %><br clear="all" />
    <p class="fieldExplanation">Your username is made public to other people on the site.</p>                       
  </ul> 
  <ul class="actions">      
    <%= f.commit_button("Save my profile and make a match >", :class => "submitForm") %>    
  </ul>
<% end %>

Это визуально работает - форма отображается с небольшой звездочкой, чтобы показать, что она поняла: required => true - но когда страница публикуется, онане запускает проверку с ошибкой;вместо этого он просто переходит на следующую страницу, как если бы он был успешным.

Я чувствую, что где-то отсутствует простая настройка для включения проверки или, возможно, я что-то не так делаю в моем контроллере?

def update
 @user = User.find(params[:id])     
 respond_to do |format|
   if @user.update_attributes(params[:user])        
      format.html { redirect_to(match_user_path(@user), :notice => 'User was successfully updated.') }              
   else
     format.html { render :action => "edit" }        
   end
 end
end

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 11 июня 2011

Вы пропустили двоеточие в коде, который вы указали в своем комментарии.Это должно быть :as, и это объясняет некоторую поломку.

С точки зрения проверки, это применяется в вашей модели.Вам нужно что-то вроде:

validates :username, :presence => true

, чтобы код на стороне сервера понимал, что без username модель недействительна.После того, как вы установили все проверки на стороне сервера, посмотрите на гем validation_reflections, если вы хотите быстро вставить их в форму.Вы можете прочитать об этом на ASCIIcasts здесь .

0 голосов
/ 13 июня 2011

Formtastic - это только представление формы, поэтому проверки должны выполняться на стороне сервера в модели.Formtastic будет использовать эти проверки, чтобы сделать вывод, следует ли пометить входные данные как необходимые или нет.Параметр :required в DSL на самом деле предназначен только для того, чтобы переопределить его в тех редких случаях, когда вы не можете делать то, что вам нужно при проверке модели.

...