2014-03-25 44 views
2

我在Rails 4中有一個奇怪的問題,涉及我的一個模型的更新操作。相同的控制器動作,但不同的重定向基於提交的參數/視圖

有2個視圖允許用戶編輯產品:標準edit_product視圖和其他準系統edit_product_images視圖可從桌面應用程序訪問,並且不提供任何其他應用程序佈局。

兩個視圖在提交表單時都會導致更新操作。但是,儘管我希望完整的Web瀏覽器視圖在保存後返回到產品#show view,但是一旦更新操作完成,分拆後的版本應該只會重新加載edit_product_images頁面。

當然,我可以創建另一個與現有更新操作非常相似的操作,但只是使用不同的重定向。但是,這似乎非常多餘。相反,我打算在提交edit_product_images表單時通過隱藏字段傳遞附加的:same_page => 1參數。

在我的更新動作,我有以下的代碼,以檢查是否params[:same_page] == "1"是真的,此更新動作:

products_controller.rb

def update 

    respond_to do |format| 

    if @product.update(product_params) 

     format.html do 
     if params[:same_page] == "1" 
      render action: "edit_product_images", layout: false 
     else 
      redirect_to @product, notice: 'Product was successfully updated.' 
     end 
     end 

     format.json { head :no_content } 

    else 
     format.html { render action: 'edit' } 
     format.json { render json: @product.errors, status: :unprocessable_entity } 
    end 
    end 

end 

但不幸的是,如果params[:same_page] == 1條款似乎總是返回假,以便我只是重定向到product#show視圖。我檢查了日誌,並在表單提交時傳遞參數。爲什麼我的if語句失敗?

我在這裏錯過了什麼?有沒有更好的方式來處理這個功能?畢竟,我只是想要基於原始視圖的不同重定向,動作是由觸發的 - 附加參數似乎是實現此目的的最簡單方法。儘管如此,我仍然接受更好的解決方

感謝您的幫助。

+0

您可以共享您在'edit_product_images'頁面中提交表單時生成的服務器日誌。 –

回答

2

。 由於您還沒有分享有問題的params散列,我只能建議您使用params[:product][:same_page]而不是params[:same_page],看看它是否適合您。

您可以檢查服務器日誌中的params散列,並查看same_page是如何傳入的。

+0

當然,我不敢相信自己一直在圈子裏跑來跑去,卻錯過了這樣一個明顯的錯誤。非常感謝! – thirdsun

+0

很高興幫助:) –

-1

嘗試params[:same_page] == '1'而不是params[:same_page] == "1"

+1

我試過了,但已經知道參數總是以字符串的形式傳遞,這就是爲什麼你必須將參數與「1」或「true」進行比較而不是真實來給出另一個例子。 – thirdsun

+0

沒錯!檢查我編輯的答案。基本上是單引號而不是雙引號。 –

+0

它有什麼不同:'1'對'1'? –

0

試用if params[:same_page] == true如果隱藏字段從形式則可以嵌套product散列內通過這可能會解決你的問題

+1

它不起作用。正如對奧斯卡回答的回答所解釋的,參數總是以字符串形式傳遞,在這種情況下,「1」不等於真。即使像true這樣的值本身在被用作參數時也會被轉換爲字符串。 – thirdsun

相關問題