簡體   English   中英

在同一 Ruby on Rails 視圖中同時使用兩種不同型號的最佳方法?

[英]Best approach to use two different models simultaneously in the same Ruby on Rails view?

所以我正在開發一個 web 應用程序,我有一個博客頁面,有兩個控制器,一個帖子 controller 用於博客,然后訂閱者 controller 只允許用戶添加新訂閱者。 所以目前我使用帖子中定義的視圖呈現內容,然后在其中我有一個部分 _subscriber 來處理訂閱 model。

當用戶嘗試訂閱時,問題就來了。 我希望能夠呈現新操作以顯示驗證,如下所示:

    def create
        @subscriber = Subscriber.new(subscriber_params)
        if @subscriber.save
            flash[:success] = "Thank you for subscribing!"
            redirect_to subscribers_url
        else
            render :new, status: :unprocessable_entity
        end
    end

除了這會導致重復視圖(new.html.erb 與部分視圖相同)這一事實之外,由於它不是部分視圖,它會重新加載整個頁面,現在僅用訂閱表單替換所有帖子。 目前,我的解決方法是在用戶單擊按鈕時進行重定向,但不會顯示驗證錯誤,這並不是一個理想的解決方案。

我嘗試只渲染部分,而不是:new 動作,如下所示:

render partial: 'subscriber', status: :unprocessable_entity

但是和只調用redirect的效果一樣; 我的驗證錯誤不會顯示。

也許理想的解決方案是使用 AJAX 之類的東西。 我試圖了解 Turbo Frames 和 Turbo Streams,但我有點困惑如何在這種情況下實現它。 本質上,我可以將我的帖子頁面的訂閱部分包裝在一個渦輪框架中,但是我將如何更新渦輪框架? 我不想有不同的帖子頁面,因為那沒有意義。 我只想改變里面視圖的內容。

實現此功能的正確/最佳實踐方式是什么? 任何建議,將不勝感激!

如果您不想實際重新加載頁面,那么是的,您需要對 AJAX / UJS 或 Turbo 幀執行一些操作。

(或 go 使用 React 或 Node 或其他一些 JS 解決方案的黑暗面)

暫無
暫無

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

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