<%= @params[:id] %> を _edit.rhml に追加して、どのような値が渡されてくるのかを実験する。http://localhost:3000/user/list にアクセスした後、ユーザの編集をクリックする。以下の例では、uyota を編集してみることにした。
{"user"=>{"lastname"=>"Administrator",
"firstname"=>"System", "login"=>"uyota"},
"submit"=>"Change Settings", "action"=>"edit_user",
"id"=>"1", "controller"=>"user",
"organization"=>{"id"=>"1"}}
params[:organization][:id]
でアクセス出来るのが分かる。
vendor/plugins/user_engine/app/controllers から app/controllers に user_controller.rb をコピーする。edit_user に飛ばされるので、edit_user 関数を見る。user.save の前に organization_id を設定すればよい。
% cvs -u10 diff app/controller/user_controller.rb
--- app/controllers/user_controller.rb 9 Dec 2006 04:37:12 -0000 1.1
+++ app/controllers/user_controller.rb 9 Dec 2006 04:36:42 -0000
@@ -39,20 +39,21 @@
# Edit the details of any user. The Role which can perform this will almost c
ertainly also
# need the following permissions: user/change_password, user/edit, user/edit_
roles, user/delete
def edit_user
if (@user = find_user(params[:id]))
@all_roles = Role.find_all.select { |r|
r.name != UserEngine.config(:guest_role_name) }
case request.method
when :get
when :post
@user.attributes = params[:user].delete_if { |k,v|
not LoginEngine.config(:changeable_fields).include?(k) }
+ @user.organization_id = params[:organization][:id]
if @user.save
flash.now[:notice] = "Details for user '#{@user.login}' have been updated"
else
flash.now[:warning] = "Details could not be updated!"
end
end
else
redirect_back_or_default :action => 'list'
end
end
これで、ユーザの所属を変更できるようになった。
しかし、今の時点では二つの問題がある。プルダウンメニューの出る位置が、"First Name" の上になってしまい見栄えが悪いのだ。出来れば、"Email" の下に出したい。見栄えは悪いが動作検証が目的で Todo を拡張しているので、後で機会があるか、気が向いたら見直すことにする。
もう一つは、一度組織に所属したら、無所属になれないことだ。こちらは、是非直したい部分ではあるが、今回は見送ることにする。まずは、他の機能を充実させてからにしたい。
なお、_edit.rhml を login_engine から持ってきたため、user_controller.rb も login_engine の方を見ていた。今回は、app 以下にコピーせずに vender 以下で試していた。実は、user_controller.rb は user_engine から取られていたのだった。コピーしなかった故に、いくらファイルを編集しても、変更が反映されずに随分無駄な時間を費やしてしまった。恐らく、app 以下に login_engine のをコピーしていれば、user_engine のコードに適合せずに一目瞭然な形のエラーが出たと思われる。そういった意味でも、vender 以下は直接編集せずに app にコピーした方がいいようだ。
セコメントをする