2012-05-14 146 views
1

我的主屏幕上有註冊表單。如果用戶輸入無效數據,我將他重定向到/signin頁面。在此頁面上,我可以看到填充字段,但錯誤說明爲空。在Ruby on Rails控制器和視圖之間傳遞模型

這裏是我的UsersController

class UsersController < ApplicationController 
    def new 
    @user = User.new(params[:user]) 
    end 

    def create 
    @user = User.new(params[:user]) 
    print @user 
    if @user.save 

    else 
     render 'new' 
    end 
    end 
end 

方法我用它來顯示錯誤

module ApplicationHelper 

    def errors_for(model, attribute) 
    if model.errors[attribute].present? 
     content_tag :div, :class => 'well error' do 
     content_tag :ul do 
      model.errors[attribute].collect {|item| concat(content_tag(:li, item))} 

     end 
     end 
    end 
    end 
end 

我的形式分:

<%= f.label :user_name %> 
<%= f.text_field :user_name, :class=>"input-medium" %> 
<%= errors_for(@user, :user_name) %> 

<%= f.label :email %> 

<%= f.text_field :email, :class=>"input-medium " %> 

<%= errors_for(@user, :email) %> 

<%= f.label :password %> 

<%= f.password_field :password, :class=>"input-medium" %> 

<%= f.label :password_confirmation, "Confirmation" %> 

<%= f.password_field :password_confirmation, :class=>"input-medium" %> 

和我註冊的觀點:

<section class="centered user-form-container"> 
    <div class="user-form well pull-left"> 
    <div class="centered"> 
     <h1>Sign up</h1> 
     <%= form_for(@user, :action=>"create") do |f| %> 
      <%= render 'signup', :f=>f %> 
      <%= f.submit "Sign up" %> 

     <% end %> 
    </div> 
    </div> 

</section> 
+1

請問這個代碼涉及到您的題? – Mischa

+0

我發佈數據來創建此控制器的動作,然後呈現新的視圖模板,如果有一些錯誤 – earsonheart

+2

你必須向我們展示視圖代碼。你必須有一些代碼檢查@user模型中的錯誤,並最終顯示它們 – coorasse

回答

1
def new 
    @user = User.new(params[:user]) 
    if (!params[:user].nil?) 
     @user.valid? 
    end 


    end 
1

在這種情況下,我相信你需要使用flash.now,像這樣:

rails docs

默認情況下,增加值,閃光燈將它們提供給下一個請求,但有時您可能想要在相同的請求中訪問這些值。例如,如果創建操作無法保存資源並直接渲染新模板,則不會產生新請求,但您仍可能想使用閃存顯示消息。要做到這一點,你可以在你使用普通閃光同樣的方式使用flash.now:

def create 
    @user = User.new(params[:user]) 
    print @user 
    if @user.save 

    else 
    # start with this, then expand the error text 
    flash.now[:error] = "Could not save user" 
    render 'new' 
    end 

end 
+0

我想顯示錯誤連接到此字段旁邊的字段 – earsonheart

+0

否,如果驗證失敗['@ user.errors'] (http://guides.rubyonrails.org/active_record_validations_callbacks.html#working-with-validation-errors)被設置。這就是他想表現的。 – Mischa

+0

最初的問題不清楚,沒有具體說明 - 所以我誤解了這個問題。我的回答是準確的,這不是他想要的。 downvoting似乎苛刻。 –

1

你這樣做你的驗證方法。

如果您使用的是標準軌驗證你可以這樣做:

validates_presence_of :foo, :message => 'Message you want to display here' 

如果你正在做一個自定義的驗證則是:

def my_validation_method 
    begin 
    my_validation_code_here 
    rescue 
    self.errors[:base] << 'Message you want to display here' 
    end 
end 
+0

我顯示了標準消息,如果我嘗試直接從註冊頁面註冊。我不認爲自定義消息會幫助我 – earsonheart

相關問題