可能有更好的方法來做會議。我寧願避免完全使用會話哈希,第二種形式和大量的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>
等等都將你的節目隱藏要素使用AJAX/JavaScript或者這些全頁面重定向? – Lukas 2009-11-11 17:23:57
我以爲我很清楚,因爲它只是Javascript,但我猜不是。我已經爲我的答案添加了一個示例。 – EmFi 2009-11-11 18:09:09
我覺得你可以逃脫只是review.erb,並有「編輯」div顯示第一,然後當你點擊「提交」,它隱藏自己,並顯示審查表。這只是一個觀察。 我更好奇,但如何做到這一點,如果我沒有做到這一點的JavaScript。即使我使用JS,我想要JS禁用兼容。雖然我同意,但這是一個簡單的方法來做到這一點,我不知道我能做到這一點*只有*這種方式。 – Lukas 2009-11-11 18:31:26