我已經看到了這個類似問題的其他鏈接,但他們都沒有在我的情況下工作。Ruby on Rails - 編輯/更新創建新記錄,而不是更新
我的更新動作在MySQL數據庫中創建新記錄
我的應用程序包括3種型號
FashionModel
ModelProfile
和Measurement
它們被定義爲如下:
class FashionModel < ActiveRecord::Base
has_secure_password
has_one :model_profile
has_one :measurement
accepts_nested_attributes_for :model_profile
accepts_nested_attributes_for :measurement
end
class ModelProfile < ActiveRecord::Base
belongs_to :fashion_model
end
class Measurement < ActiveRecord::Base
belongs_to :fashion_model
end
的fashion_model_controller.rb
如下:
class FashionModelsController < ApplicationController
def new
@fashion_model = FashionModel.new
end
def create
@fashion_model = FashionModel.new(fashion_models_sign_up_params)
if @fashion_model.save
flash[:success] = "Welcome to Meriad"
session[:fashion_model_id] = @fashion_model.id
redirect_to edit_fashion_model_path(@fashion_model)
else
render 'new'
end
end
def edit
@fashion_model = FashionModel.find(params[:id])
@fashion_model.build_model_profile
@fashion_model.build_measurement
end
def update
@fashion_model = FashionModel.find(params[:id])
if @fashion_model.update(fashion_models_edit_params)
flash[:success] = "Saved!"
redirect_to fashion_model_path(@fashion_model)
else
render 'edit'
end
end
def show
@fashion_model = FashionModel.find(params[:id])
end
end
的fashion_model_edit_params
是
def fashion_models_edit_params
params.require(:fashion_model).permit(:first_name,
:last_name,
:email,
:password,
model_profile_attributes: [:id,
:location,
:bio, :gender,
:phone_number,
:rate,
:profile_image,
:birthdate],
measurement_attributes: [:id,
:feet,
:inches,
:bust,
:waist,
:hips,
:dress,
:shoes,
:hair,
:eyes])
end
我想在這些線路上的東西:
在F ashion模型簽約通過
new.html.erb
應用程序(存儲在fashion_models
表)的
index.html.erb
包含所有fashion_models
的列表,編輯信息的選項(更新他們的個人資料)的
edit.html.erb
包含model_profiles
表以及measurements
表,這兩個表都具有fashion_models
表的外鍵。
我fashion_models/new.html.erb
模板是包含first_name
,last_name
,email
,password
非常簡單。
我fashion_models/edit.html.erb
模板是一樣的東西:
<%= form_for @fashion_model do |f| %>
# fashion_model fields here
<%= f.fields_for :model_profile do |t| %>
# model_profile fields here
<% end %>
<%= f.fields_for :measurement do |t| %>
# measurement fields here
<% end %>
<% end %>
現在,每當我編輯fashion_model/:id
,在model_profile
和measurement
在數據庫中創建一個新的記錄,而不是更新現有記錄。另外,當我在Edit Profile
頁面上時,沒有任何字段預填充現有數據。我必須再次手動輸入所有數據。
首先,我認爲這是因爲build
方法,但是當我刪除它們時,fields_for
不顯示。
感謝任何幫助!
感謝您的幫助,但我不認爲我搞砸了路線。我有一個fashion_models的資源。 正如你所說我有一個創建和投入/補丁更新 –
@PradyumnaShembekar發佈請求如果'form_for'創建對象,這是因爲它假設該對象不在數據庫中,您可以打印頁面當然,放在表格之前:'
<%= @ fashion_model.persisted? %>
' –謝謝。是的,我只是通過導軌控制檯嘗試。我現在擔心的是,因爲我正在將我的/新的或註冊頁面直接重定向到我的編輯頁面,所以我無法實例化ModelProfile和Measurement。我在結束新動作並將fashion_model_id設置爲@ fashion_model.id之前嘗試創建它們,但仍然無法做到這一點。你是否認爲之前的行動可以滿足這種需求 –