簡體   English   中英

如何在資源中添加“預覽”操作?

[英]how to add a `preview` action to resources?

我正在尋找正確的方法,以在new動作和create動作之間包括preview動作。 假設我有以下內容:

resources :users

默認情況下,提交表單時:

  • 如果是new ,則調用create action;
  • 如果為edit ,則調用update操作。

這樣,我可以對newcreate使用相同的形式(局部),這太好了!

如何配置資源以在動作之間包含preview 我的意思是,強制new調用preview ,然后preview以調用create

我可以添加一個新的路線/動作,並為該動作指定表格,但是同一表格不能用於newedit

有沒有一種方法可以配置資源呢?

看看這個railscast: multibutton表單 ,它顯示一個同時具有“ preview”和“ submit”按鈕的表單,也許這是您可能想要做的。

順便說一句,您不能通過將局部變量傳遞給局部變量來使用相同的表單嗎? 例如:

<%= form_for @profile, url: dynamic_path do |f| %>
  ...
<% end %>

<%= render 'form', dynamic_path: profile_preview_path %>

您有幾種方法可以做到這一點:

  1. 您可以將表單的網址更改為preview操作(您必須為其添加路線)。
  2. 您可以使用create操作進行預覽和創建:
    也就是說,您向表單提交請求中添加了一個參數(例如':go_to_preview')。 如果在控制器中找到它,則呈現preview
    當用戶想要確認預覽時,您再次提交數據(不帶該參數),這次創建記錄。

還有2種動態可能性:

  1. 您可以實時創建預覽(如果可以的話(如SO上的此處所示)),然后僅使用create動作,
  2. 第一個選項的變體 :當用戶提交表單時,您向preview動作發送ajax發布請求 ,呈現部分表單並將其包含在頁面上,然后在用戶仍然擁有他剛剛填寫的表單時,用戶決定如果她想修改或提交。

我建議添加DateTime列“ finished_at”,“ published_on”等...適合您的域的任何內容。

以博客文章為例:

scope :published, where("published_on IS NOT NULL")
scope :draft, where(:published_on => nil)

在適當的地方使用合並范圍和新字段來限制后續操作。

這種方法為您提供的不僅僅是您想要的:

  1. 一種基於“狀態”限制處理的方法
  2. 有關創建時間與發布時間的數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM