1
一個在Admin::SettingsController
創造新的紀錄,我想創建一個新的調查記錄,如果一個不存在,或更新現有的調查記錄。什麼是最好的的Rails來處理的創建和查找方式是什麼?我的錯誤背部 No route matches [POST] "/admin/settings"
#UPDATE方法,如果不存在
edit_admin_settings_path GET /admin/settings/edit(.:format) admin/settings#edit
admin_settings_path PATCH /admin/settings(.:format) admin/settings#update
PUT /admin/settings(.:format) admin/settings#update
路線
resource :settings, only: [:edit, :update]
控制器
class Admin::SettingsController < Admin::BaseController
before_action :load_survey
def edit
@survey = Survey.find_or_initialize_by(id: params[:id]) unless @survey
end
def update
@survey.update_attributes!(params_for_create_or_update)
flash[:notice] = 'Survey updated'
redirect_to action: :edit
end
protected
def load_survey
@survey = Survey.last || Survey.new
end
def params_for_create_or_update
params.require(:survey).permit(
:name,
:link,
:language_id
)
end
end
對象: 因此,而不是'resources'我使用'資源:調查,只:[:編輯,:更新]'。因此,編輯路徑是'管理/調查/ edit',而不是通過'http://lvh.me:3000 /管理/調查/:ID/edit'。如果我轉到'admin/surveys/edit'並且沒有當前的調查記錄,我該如何呈現表單? – VegaStudios
豈不是最好的,如果該記錄的存在是爲了使'new'但隨後在後臺檢查,並根據需要更新呢? – Cyzanfar
我更新了主帖以保持格式。使用'find_or_create_by'將允許在提交時創建一個空記錄到數據庫。使用'find_or_initialize_by'呈現POST路由錯誤@cyzanfar – VegaStudios