2016-07-06 11 views
0

내가 실패해야하는 양식에 데이터를 입력하면 오류가 발생합니다. 아래의 제 모델에 따라 데이터를 az, AZ, 0-9 및 공백의 조합으로 작성해야하며 양식을 쓰레기처럼 채우는 것이 좋습니다.) (&^%^& (* & %^& * 심지어 빈 필드를 제출 *, 나는 오류가있을 예상이 경우,이없는 Ruby on Rails 4에서 ActiveModel로 검증 겉으로보기에는 작동하지 않는다

여기 모델의 두드러진 부분 :..

class Numerology 
    include ActiveModel::Model 

    attr_accessor :phrase 

    VALID_PHRASE_REGEX = /\A[a-zA-Z0-9\s]+\z/ 

    validates :phrase, presence: true, length: { minimum: 1 }, 
      format: { with: VALID_PHRASE_REGEX } 

여기 컨트롤러의 ... 내가 원하는 것은 폼에 잘못된 입력을 제공 할 때 어떤 에러가 발생하더라도 인덱스 (폼이있는 페이지)로 돌아가는 것입니다. 여기에 올바른 방향으로 가고 있지만, 나는 어떤 오류도 전혀 발생시키지 않는 것 같기 때문에 이것이 2 차 질문이 될 수 있다고 생각한다 (물론 @ numerology.errors.any? 거짓 일 것이다).

class NumerologiesController < ApplicationController 
    before_filter :authenticate_user! 
    respond_to :html 

    def index 
    @numerology = Numerology.new 
    end 

    def create 
    @numerology = Numerology.new(params[:numerology]) 
    if @numerology.errors.any? 
     render :index 
    else 
     @numresults = Numerology.analysis(params[:numerology][:phrase]) 
    end 
    end 

end 

그리고 마지막으로, 여기에 다음 뷰, 최초의 인덱스와는 만들기 :

인덱스 페이지 :

<div class="center jumbotron"> 
    <h1>Numerology Analysis Module</h1> 

    <br> 
    <%= bootstrap_form_for(@numerology, layout: :horizontal, label_col: "col-sm-4", control_col: "col-sm-6") do |f| %> 

    <p> Enter word or phrase to be analyzed in the field below (Required).</p> 

    <%= @numerology.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
    <% end %> 
    <%= f.text_field :phrase, label: "Word or Phrase: " %> 

    <br><br> 

    <%= f.submit "Perform Numerological Analysis" %> 
    <% end %> 
    <br><br> 
    <%= image_tag("SMILE.jpg", alt: "Smiley Face") %> 
</div> 

만들기 페이지 :

<div class="center jumbotron"> 
    <h1>Numerological Analysis Report</h1> 
    <div class="numreport"> 
    <table class="numtable"> 
     <% @numresults.each do |line| %> 
     <% if !line.nil? %> 
      <tr> 
      <td><%= "#{line}" %></td> 
      </tr> 
     <% end %> 
     <% end -%> 
    </table> 
    </div> 
    <%= link_to "Perform Another Numerological Analysis - Click Here", numerologies_path %> 
    <br><br><br> 
    <%= image_tag("SMILE.jpg", alt: "Smiley Face") %> 
</div> 

그래서, 내가 뭘 잘못하고 있는지 누구라도 알 수 있니? 시도 할 다른 것들을 제안하시오. 감사!

+0

아무것도 분명하게 밝혀지지 않습니다. 나는 이것을 시도하는 것이 좋습니다 : 1)'레일 콘솔을 실행'2)'n = Numerology.new (: phrase =>) (&^%^& (* & %^& ** ")'3)'n.valid ?) 4)'puts n.errors.inspect' 5) 출력을 복사하고 질문을 편집하고 입력하십시오. (오류가 발생하지 않는 한 그렇게하지 않는 한). (참고 : 레일 주변 장치가 더 빨리 돌아갈 수 있습니다. 또한 컨트롤러가 오류를 반환하는 방법에있어 유효성 검사가 * 실제로 작동하는지 * 잘못된지를 확인할 수 있습니다 *) –

+1

솔루션을 켭니다 나는 유효하지 않았던가? 또는 유효하지 않습니까? 어디서나, 그리고 한번 내가 그것을 한 모든 일을 시작했다. 응답 해 주시고 콘솔 사용법을 지적 해 주셔서 감사합니다. 앞으로도 계속해 나갈 것입니다. –

답변

0

오류 목록을 채우기 위해 valid? 또는 invalid?을 호출해야합니다.

http://api.rubyonrails.org/classes/ActiveModel/Validations.html#method-i-valid-3F

유효한? (컨텍스트 = 전무)은

지정된 모든 검증을 실행하고 오류가 가 그렇지 않은 경우는 false 추가되지 않은 경우 true를 반환합니다.

def create 
    @numerology = Numerology.new(params[:numerology]) 
    if @numerology.invalid? 
     render :index 
    else 
     @numresults = Numerology.analysis(params[:numerology][:phrase]) 
    end 
    end 
+0

성공! 이 경우 전화가 무효입니까? 마술 총알이었다. 문서 페이지 링크를 포함 해 주셔서 감사합니다. 흥미롭게도 나는 모든 독서와 인터넷 검색에서 그 페이지를 읽었지 만 어떤 이유 때문에 그것이 내 마음에 "클릭"하지 못했다. (회상에서는 분명하다.) 도와 줘서 고마워! –

+1

쿨, 위대한 솔루션을 찾았습니다. 나는 당신이'new' 만 가지고 있고'create/update'가 아닌 것을 발견하지 못했습니다 (create/update는 또한'valid? '를 호출 할 것입니다.). 나는 말해야한다고 생각했다 : 인간의 두뇌가 네거티브를 알아 내는데 어려움을 겪고 있기 때문에 네거티브가 아닌 포지티브를 사용하는 것이 일반적으로 좋은 루비 연습이다.그래서이 경우에'if @ numerology.valid? (do_positives_stuff) else render : index' 대신에 지금 가지고있는 길 ... 대신에, 훌륭한 일 :) –