2012-11-21 96 views
1

我正在使用Bootstrap-Sass以及Formstatic。我想到了一個錯誤信息會自動顯示在這張照片旁邊的Formstatic領域,如:here http://asciicasts.com/system/photos/227/original/E185I06.pngRails:表單驗證錯誤未顯示(使用Formtastic和Bootstrap-Sass)

但是,即使用戶將輸入無效,我的應用程序不顯示錯誤消息。這似乎是一個簡單的問題,但我無法弄清楚背後的原因。

PostController中

# POST /posts 
# POST /posts.json 
def create 
    @post = Post.new(params[:post]) 
    @post.view = 0 
    @post.like = 0 
    @post.hate = 0 
    respond_to do |format| 
    if @post.save 
     @posts = Post.paginate(:page => params[:page], order: 'like desc', per_page: 10) 
     format.html { redirect_to posts_path } 
     format.json { render json: @post, status: :created, location: @post } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @post.errors, status: :unprocessable_entity } 
    end 
    end 
end 

PostModel

validates :name, :presence => true 
    validates :content, :presence => true, 
         :length => { :minimum => 10, :maximum => 300} 

_form(POST)

<% @post = Post.new %> 
<%= semantic_form_for @post do |f| %> 
<%= f.semantic_errors :name %> 
<%= f.inputs do %> 
    <%= f.input :name, :label => 'name' %> 
    <%= f.input :content, :label => 'body' %> 
<% end %> 
<%= f.actions do %> 
    <%= f.action :submit, :button_html => { :class => "btn btn-primary" }, :as => :button %> 
    <%= f.action :cancel, :as => :link %> 
<% end %> 

在PostController中,我試圖刪除以下兩行

#format.html { render action: "new" } 
    #format.json { render json: @post.errors, status: :unprocessable_entity } 

,並添加

render @post.errors 

然後,我得到了

@messages={:name=>["can't be blank"], :content=>["can't be blank", "is too short (minimum is 10 characters)"]}> 

所以我覺得這個問題可能是我的方式m渲染json是錯誤的。有人可以幫我解決這個問題嗎?

回答

0

Rails有自己的驗證錯誤渲染,它與Bootstrap使用的HTML結構或CSS結構不匹配。

要解決這個問題,您可以添加查看您自己的代碼塊輸出錯誤。

<% if @posts and @posts.errors and @posts.errors.count > 0 %> 
<div class="alert alert-danger"> 
    <a class="close" data-dismiss="alert">&times;<a> 
    <strong><%= pluralize(@posts.errors.count,"error") %> validation problems found.</strong> 
    <ul> 
    <% @posts.errors.full_messages.each do |error| %> 
    <li><%= error %></li> 
    <% end %> 
    </ul> 
</div> 

或者你可以將此塊移動到部分模板,以避免代碼dublication。

<% if resource and resource.errors and resource.errors.count > 0 %> 
    <div class="alert alert-danger"> 
    <a class="close" data-dismiss="alert">&times;<a> 
    <strong><%= pluralize(resource.errors.count,"error") %> validation problems found.</strong> 
    <ul> 
    <% resource.errors.full_messages.each do |error| %> 
     <li><%= error %></li> 
    <% end %> 
    </ul> 
    </div> 
<% end %> 

又通到@posts參數

<%= render "shared/validation_errors", :resource => @posts %> 

在這裏你可以找到關於這個問題 http://fizzylogic.nl/2013/12/22/temp-slug-54/

更多信息