2016-01-13 16 views
1

我在我的Rails應用中有聯繫表單。如果表單未成功提交,我希望表單顯示用戶以前輸入的內容。我猜想我應該使用會話先包含所有舊輸入,不知道我是否正確。Rails:在提交失敗後顯示以前輸入的聯繫表格

接下來的問題是,如何在頁面刷新後讓舊的輸入顯示在聯繫表單上?

這是我在我的控制文件中的代碼:

def createMessage 
    @message = Message.new(message_params) 

    if @message.valid? 
    MessageMailer.new_message(@message).deliver 
    flash[:success] = "Thank you." 
    redirect_to root_path 
    else 
    session[:message_error] = @message 
    flash[:danger] = "An error occurred while delivering this message." 
    redirect_to root_path 
    @message = session[:message_error] 
    end 
end 

這是我的形式佈局:

<%= form_for @message, url: root_path do |message_form| %> 
    <div class="form-inline"> 
    <%= message_form.text_field :first_name, :class => 'form-control', placeholder: "First Name*" %> 
    <%= message_form.text_field :last_name, :class => 'form-control', placeholder: "Last Name*" %> 
    </div> 

    <div class="form-inline"> 
    <%= message_form.text_field :business_title, :class => 'form-control', placeholder: "Business Title" %> 
    <%= message_form.text_field :business_name, :class => 'form-control', placeholder: "Business Name" %> 
    </div>  

    <div class="form-inline"> 
    <%= message_form.text_field :phone, :class => 'form-control', placeholder: "Phone*" %> 
    <%= message_form.email_field :email, :class => 'form-control', placeholder: "Email*"%> 
    </div>  

    <div class="form-group"> 
    <%= message_form.text_field :street_address, :class => 'form-control', placeholder: "Street Address*" %> 
    </div> 

    <div class="form-group"> 
    <div class="input-group"> 
     <div class="input-group-addon">Singapore</div> 
     <%= message_form.text_field :postal_code, :class => 'form-control', placeholder: "Postal Code*" %> 
    </div> 
    </div>        

    <div class="form-group">  
    <%= message_form.text_area :content, :class => 'form-control', placeholder: "Additional information"%> 
    </div> 

    <div class="form-group"> 
    <%= message_form.submit "submit", :class => 'btn btn-default' %> 
    </div>  

預先感謝您。

回答

3

的的form_for助手不正是你想要什麼,如果它的正確使用

在你new方法,你能創建一個全新的空消息...

def new 
    @message = Message.new 
end 

因此,「新」視圖顯示時,所有的字段都準備好新的輸入

在你創建方法

def create 

    @message = Message.new(message_params) 

    if @message.valid? 
    MessageMailer.new_message(@message).deliver 
    flash[:success] = "Thank you." 
    redirect_to root_path 
    else 
    flash.now[:danger] = "An error occurred while delivering this message." 
    render :new 
    end 
end 

請注意,我們正在使用包含輸入值的@message對象執行render :new,因此會自動顯示這些值。

編輯 - 注意提示信息通常只在redirect_to顯示...有你需要使用flash.now...

0

首先,當你不能提交render閃光燈消息顯示,@message變量是零所以賦值變量沒用。

其次,當你redirect_to時,你不能分配@message變量。

我不確定,但我認爲你不能使用@message變量,相反,你可以保存message_params到會話,然後你可以在視圖中處理它。