Tôi có đối tượng biểu mẫu sau để quản lý biểu mẫu lồng nhau phức tạp.Tôi nên xử lý thao tác chỉnh sửa và cập nhật khi sử dụng Đối tượng mẫu như thế nào?
Mẫu
= simple_form_for(@profile_form, :url => profiles_path) do |f|
...
đường
resources :profiles
khiển
class ProfilesController < ApplicationController
def new
@profile_form = ProfileForm.new
end
def edit
@profile_form = ProfileForm.new(params[:id])
end
def create
@profile_form = ProfileForm.new
if @profile_form.submit(params[:profile_form])
redirect_to @profile_form.profile, notice: 'Profile was successfully created.'
else
render action: "new"
end
end
def update
@profile_form = ProfileForm.new(params[:id])
if @profile_form.submit(params[:profile_form])
redirect_to @profile_form.profile, notice: 'Profile was successfully updated.'
else
render action: "edit"
end
end
end
Đối tượng biểu mẫu
class ProfileForm
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
def initialize(profile_id = nil)
if profile_id
@profile = Profile.find(profile_id)
@person = profile.person
end
end
...
def submit(params)
profile.attributes = params.slice(:available_at)
person.attributes = params.slice(:first_name, :last_name)
if valid?
profile.save!
person.save!
true
else
false
end
end
def self.model_name
ActiveModel::Name.new(self, nil, "Profile")
end
def persisted?
false
end
end
Nhưng ngay bây giờ khi tôi đang chỉnh sửa đối tượng sử dụng mẫu đơn này create
hành động được gọi. Sau đó tôi nên cấu trúc lại biểu mẫu này như thế nào? Mã bên dưới trên update
tạo một đối tượng Cấu hình khác.
Ok, giờ tôi đã hiểu, cảm ơn. Nhưng làm thế nào để thay đổi url mẫu sau đó: '' = simple_form_for (@profile_form,: url => profiles_path) do | f | '' Và tôi nhận được lỗi: '' undefined local variable hoặc method 'id 'cho # '' –
tomekfranek
Và nếu @person là nil thì sao? – tomekfranek
Tôi vẫn còn lỗi tương tự sau khi thêm phương thức '' to_param''. Có vẻ như vấn đề là với url. – tomekfranek