我有几个使用 STI 设置的模型
人 < ActiveRecod .....
男人
女士
我已经指定了一个类型字段并创建一个新记录工作正常。子类型(男人或女人)与记录一起成功保存,并且类型列中的类型是正确的。
但是,当我尝试更新/编辑记录时,它从不调用 SQL UPDATE。update_attributes 返回真。日志表明调用了 SELECT,但没有调用 UPDATE。
如果我从表单中删除类型字段。并创建它保存的新记录。但类型字段为空。但后来我可以更新记录。
有什么想法或解决方法来解决这个问题吗?
控制器代码
# GET /persons/new
# GET /persons/new.json
def new
@person = current_user.persons.build(params[:person])
@person.type = params[:type]
respond_to do |format|
format.html # new.html.erb
format.json { render json: @pass }
end
end
# GET /persons/1/edit
def edit
@person = Person(params[:id])
end
# POST /persons
# POST /persons.json
def create
@person = current_user.persons.build(params[:person])
respond_to do |format|
if @person.save
format.html { redirect_to @person, notice: 'Person was successfully created.' }
format.json { render json: @person, status: :created, location: @pperson }
else
format.html { render action: "new" }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
# PUT /persons/1
# PUT /persons/1.json
def update
@person = Person.find(params[:id])
respond_to do |format|
if @person.update_attributes(params[:person])
format.html { redirect_to @person, notice: 'Person was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
当我调用 new 时,它将用于子类,即
<%= link_to "New Woman", new_woman_path %>
我为此准备了路线,即
resources :women, :controller => "persons", :type => "Woman"
resources :men, :controller => "persons", :type => "Man"
当我打电话给编辑时,这是我遇到问题的地方,即
<%= link_to 'Edit', edit_person_path(@person) %>
请注意,如果我在控制台中创建和编辑记录。它已创建并更新好。