2015-12-30 177 views
1

我有一個軌道項目,我想從我的用戶模型傳遞一個變量到另一個控制器。軌道從模型傳遞變量到另一個控制器

我該怎麼做?我知道這不是最好的辦法,但我不能想出任何其他方式來解決我的問題。

我正在使用Devise進行登錄,並且如果sign_in由於用戶被鎖定而失敗,我想顯示一個鏈接。

在我的用戶模型中,我有這個方法

def after_database_authentication 
    update_attributes!(password_changed_at: self.last_activity_at) 
    user_locked = self.is_locked 
end 

我想在我的帖子控制器添加這個變量user_locked

所以在我的帖子控制器的方法新的,我想在這裏使用它

def new 
    ap user_locked 
end 

覺得只有這樣,我可以這樣使用會話,但不能分配在鐵軌模型變量會話。

任何其他選項將不勝感激。謝謝

+2

是'user_locked'一個db列嗎? –

+0

不,它不是一個數據庫列 –

回答

1

當你使用Devise時,輔助方法current_user可供你使用。那麼爲什麼你不使用這種解決方案?

class User 
    def locked? 
    is_locked 
    end 
end 

UserController 
    def new 
    current_user.locked? 
    end 
end 
0

我認爲你會對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::Observerafter_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 
+0

我實際上並沒有感到困惑,並且這樣做有重要的is_locked屬性。也許我沒有解釋清楚..我hv顯示我的sign_in頁面上的鏈接。如果登錄失敗,d鏈接只能顯示b。如果用戶登錄在我的視圖上失敗,只有方法來刪除會話/新的是檢查user.is_locked是否爲真。但自會議/新我不高電壓任何current_user,只有這樣的方式來檢查這是dring認證保存模型中的全局會話變量,我可以檢查會議/新來顯示我的鏈接。我希望這可以讓它更清晰一些。 –

相關問題