2009-11-11 51 views
0

我有一個表單,在提交時,要求客戶查看數據,然後在保存數據之前確認更改。更好的方式來保留手動返回重定向的表單數據?

但是,如果用戶點擊返回按鈕返回並在提交之前查看數據,我正在使用保留數據的非常粗糙的方式。由於我希望用戶更新字段而不是當前數據庫字段,因此要在此「返回」操作中顯示,我必須通過post/get參數傳遞值。所以我的控制器看起來像這樣:

@customer = Customer.find session[:id] 
    unless params[:customer].nil? 
     @customer.attributes = params[:customer] 
    end 

有沒有更好的方法來做到這一點?實際上我很好奇什麼是普遍接受的Rails會話用法,因爲我非常確定使用會話來傳遞信息,比如這是禁忌。是的,不是?思考?謝謝。

回答

0

可能有更好的方法來做會議。我寧願避免完全使用會話哈希,第二種形式和大量的JavaScript。

下面是我如何處理它。 第一種形式根本不會有太大改變,只需提交一個名爲review的新動作即可。

查看操作將顯示查看的更改,並且具有可見的編輯鏈接和確認按鈕。它還會在上一頁中重新創建一個隱藏元素的表單,該元素將再次提交給審覈操作。

確認按鈕將提交給您的更新操作。

單擊編輯鏈接將隱藏審閱區域並顯示來自上一頁的重複內容。

下面是一些示例代碼錘向下點:

應用程序/控制器/ example_controller.rb

class ExampleController < ApplicationController 

    def edit 
    @example = Example.find(params[:id]) 
    end 

    def review 
    @example = Example.find(params[:id]) 
    @example.update_attributes(params[:example]) 
    @example.valid? 
    end 

    def update 
    @example = Example.find(params[:id]) 
    @example.update_attributes(params[:example]) 
    if @example.save 
     redirect_to @example 
    else 
     render :action => :review 
    end 
    end 
end 

應用/視圖/示例/ _form.html.erb:

<% form_form @example, :url => {:action => "review"} do |f|%> 
    ... 
    Form inputs go here 
    ... 
<% end %> 

app/views/examples/edit.html.erb:

<%= render :parital => form %> 

應用程序/視圖/例子/ review.html.erb:

<div id="review"> 
    ... 
    content for review goes here 
    ... 
    <%= link_to_function "Edit", "$('review').hide(); $('edit').show()" 
    <% form_for @example do |f| %> 
    <%= hidden_field :attribute, @example.attribute %> 
    ... 
     hidden_field for each attribute 
    ... 
    <%= submit_tag "Accept These Changes" %> 
    <% end %> 
</div> 
<div id="edit" style="display:none"> 
    <%= render :partial => 'form' %> 
</div> 
+0

等等都將你的節目隱藏要素使用AJAX/JavaScript或者這些全頁面重定向? – Lukas 2009-11-11 17:23:57

+0

我以爲我很清楚,因爲它只是Javascript,但我猜不是。我已經爲我的答案添加了一個示例。 – EmFi 2009-11-11 18:09:09

+0

我覺得你可以逃脫只是review.erb,並有「編輯」div顯示第一,然後當你點擊「提交」,它隱藏自己,並顯示審查表。這只是一個觀察。 我更好奇,但如何做到這一點,如果我沒有做到這一點的JavaScript。即使我使用JS,我想要JS禁用兼容。雖然我同意,但這是一個簡單的方法來做到這一點,我不知道我能做到這一點*只有*這種方式。 – Lukas 2009-11-11 18:31:26

相關問題