我認爲你會對MVC
結構感到困惑。
您的model
是一個類,它或者填充數據庫數據,或者具有類方法/變量形式的預定義數據。
因此,當你問....
我想從我的用戶模型傳遞一個變量到另一個控制器
...背景是完全不正確。
型號
如果你想通過你的模型傳遞值,你要麼把它存儲在數據庫中(填充了值模型的屬性,這樣一個),或者你「會在類級別將其存儲爲一個值:
#app/models/user.rb
class User < ActiveRecord::Base
def is_locked?
true #-> User.new.is_locked? -> true
end
def self.is_locked?
false #-> User.is_locked? -> false
end
end
從你寫的是什麼,我會強烈建議使is_locked
數據庫屬性:
$ rails g migration AddIsLockedToUsers
# db/migrate/add_is_locked_to_users________.rb
class AddIsLockedToUsers < ActiveRecord::Migration
def change
add_column :users, :is_locked, :boolean, default: false
end
end
$ rake db:migrate
這將設置is_locked?
值作爲你的User
模型的屬性,這意味着你調用一個User
每一次,你就可以檢查它們是否被鎖定或不:
#app/controllers/posts_controller.rb
class PostsController < ApplicationController
def new
@user = User.find params[:user_id]
redirect_to root_path if @user.is_locked?
end
end
-
在此之上,你不妨使用ActiveRecord::Observer
或after_update
回調更新鎖定狀態:
#app/models/user.rb
class User < ActiveRecord::Base
after_update :set_locked, if: "password_changed_at.changed?"
private
def set_locked
self.is_locked = true
end
end
是'user_locked'一個db列嗎? –
不,它不是一個數據庫列 –