2017-08-30 39 views
-1

我正在使用Rails 5.爲了不重複太多的代碼,我希望使用相同的表單來創建和更新我的對象。我想通過此表格提交到我的控制器的創建創建方法......在Rails中,我如何使用相同的表單來創建和更新我的對象?

def create 
    @user_notification = UserNotification.new(user_notification_params) 
    ... 
    end 

,並更新其更新方法...

def update 
    ... 
    end 

我有這樣的形式,爲創建工作正常...

<%= form_for @user_notification, :url => user_notifications_path do |f| %> 
    <%= f.hidden_field :id %> 
    ... 
    <div class="field"> 
    <%= f.label :price, 'Price' %> <span class="required">*</span> <br> 
    <%= f.text_field :price, :size => 30 %> 
    </div> 
    ... 

,但是當涉及到更新,我得到在提交我的更新請求這個錯誤...

No route matches [PATCH] "/user_notifications" 

我在我的config/routes.rb中文件

resources 'user_notifications' 

定義,但我感覺這個問題是不是路線問題更深。如何調整我的表單定義。有沒有什麼辦法可以在創建和更新時使用相同的部分,如果是這樣,我需要對上述做些什麼調整?

+0

解決這個問題的最簡單方法是生成一個腳手架。腳手架將爲您提供默認視圖,包括用於創建和編輯操作的部分表單。 – hashrocket

回答

1

我想你可能會遇到的問題是,你是明確設置的URL在你的形式:

form_for @user_notification, :url => user_notifications_path 

user_notifications_path將根據請求方法匹配到兩個路由。使用user_notifications_path與GET將匹配到索引操作,並且POST將匹配到創建操作。

對於您的情況,您需要user_notification_path,注意它是單數。此幫助程序將與GET請求上的show操作相匹配,更新PUT/PATCH請求上的操作,並銷燬DELETE請求上的操作。

使用的form_for,你應該能夠取得預期的效果,而不會明確設置的網址:

form_for @user_notification 

Rails會自動將基於在@user_notification模型是否是一個新的正確的URL和請求的方法記錄與否,並自動嘗試爲您找到正確的路線。

0

您可以使用渲染來幫助rails render guilde 這裏是示例代碼

第一重命名形式_user_notification.html.erb(注:請確保您添加_在文件名前面

和你new.html.erb和edit.html.erb,利用渲染叫它

<%= render 'user_notification' %> 
相關問題