我第一次使用STI創建了一個應用程序,並且我偶然發現了一個令人困惑的障礙。Rails STI:ActiveRecord PUT事務工作,但字段不更新?
考慮以下兩種型號,並繼承:
User.rb
class User < ActiveRecord::Base
attr_accessible :email, :first_name, :last_name, #more follows
Waiter.rb
class Waiter < User
我在/服務員/用戶/做了一個表格[:編號] /編輯執行以下操作:
<%= simple_form_for @user,
:url => { :controller => "admin/waiters/users", :action => "update"} do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :email %>
<%= f.input :start_date %>
<%= f.button :submit, "Save", class: "btn btn-primary"%>
<% end %>
但是,按提交是通過發佈帖子請求,但未能更新實際數據。是否因爲路線還是錯誤?請參閱下面的SQL轉儲:
Started PUT "/admin/waiters/users/6" for 127.0.0.1 at 2013-02-10 20:45:59 -0800
Processing by Admin::Waiters::UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"6EB82/aWryLgj/tZcvoOWmw98PAPmJYUViAQronv6Fw=", "waiter"=>{"first_name"=>"John", "last_name"=>"Smith", "email"=>"[email protected]"}, "commit"=>"Save", "id"=>"6"}
User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
Role Load (0.5ms) SELECT "roles".* FROM "roles" INNER JOIN "user_roles" ON "roles"."id" = "user_roles"."role_id" WHERE "user_roles"."user_id" = 1
Waiter Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 6 LIMIT 1
(0.1ms) BEGIN
User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 6) LIMIT 1
CACHE (0.0ms) SELECT 1 AS one FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 6) LIMIT 1
(2.4ms) UPDATE "users" SET "perishable_token" = 'FplOAv6d4eOBv0gHW3b', "updated_at" = '2013-02-11 04:45:59.206797' WHERE "users"."id" = 6
(0.7ms) COMMIT
Redirected to http://localhost:3000/admin/waiters/users
控制器似乎在更新操作後重新定向,但數據未保存。我在這裏錯過了什麼?感謝Rails初學者的幫助。
這是在控制器/管理/服務員發現用戶控制器/
def edit
form_info
@user = Waiter.find(params[:id])
end
def update
@user = Waiter.find_by_id(params[:id])
if @user.update_attributes(params[:user])
flash[:notice] = "Successfully assigned Waiter."
redirect_to admin_waiters_users_url()
else
form_info
render :action => 'edit'
end
end
你可以發佈你的管理員/用戶/服務員控制器?我懷疑問題是你做@ user.update(params [:user]),而你需要做@ user.update(params [:waiter])。 – Max 2013-02-11 05:32:36
添加控制器! – mztwo 2013-02-11 05:37:09