2015-04-21 42 views
0

在我的應用程序中,我想更改徽標和其他默認圖片,具體取決於用戶登錄。任何人都有一個很好的教程或知道如何做到這一點? 我一直在尋找這個很多,但沒有太多關於它的信息。Rails 4,根據用戶更改佈局中的徽標

我已完成用戶登錄系統並可以創建新角色。目前,這些角色除了存在以外不做任何事情。

我現在正在添加我的主佈局,用戶模型和角色模型。我想要的是根據當前用戶角色更改「wfront /徽標」。我認爲它應該很簡單,但我在軌道上很新,而這個應用程序是由另一個人編寫的。

如果您需要更多信息,請告訴我。

views/layouts/application.html.haml 
//this is my app layout and I want to change the logo dynamically 'wfront/logo' 
    %html 
     %head 
     %title= full_page_title 
     = render 'wfront/head' 
     = csrf_meta_tags 
     %body{ class: "fixed-header fixed-navigationx smart-style-0 #{cookies[:menu_state]}" } 
     %header#header 
      = render 'wfront/logo' 
      = render 'wfront/context_select' 
      = render 'wfront/subcontext_select' 
      = render 'wfront/toggle_menu_button' 
      = render 'wfront/user_info' 
      .pull-right 
      = render 'wfront/currency_select' 
      = render 'wfront/date_select' 
     %aside#left-panel 
      = render 'wfront/nav_menu' 
      %span.minifyme{ data: { action: 'minifyMenu' } } 
      %i.fa.fa-arrow-circle-left.hit 

     #main 
      #ribbon 
      #content 
      .row 
       = render 'wfront/title' 
       .col-xs-12.col-sm-5.col-md-5.col-lg-7 
       %ul#sparks 
        = render 'wfront/sparks' 
        = render 'wfront/exchange_rates' 
      = yield 

     .page-footer 
      = render 'wfront/footer' 

     = render 'wfront/quaam' 
     = javascript_include_tag 'application', "data-turbolinks-track" => true 
     = yield :scripts 

     = render 'wfront/modal' 

-

models/user.rb 
    # == Schema Information 
    # 
    # Table name: users 
    # 
    # id      :integer   not null, primary key 
    # email     :string(255)  default(""), not null 
    # encrypted_password  :string(255)  default(""), not null 
    # reset_password_token :string(255) 
    # reset_password_sent_at :datetime 
    # remember_created_at :datetime 
    # sign_in_count   :integer   default(0), not null 
    # current_sign_in_at  :datetime 
    # last_sign_in_at  :datetime 
    # current_sign_in_ip  :string(255) 
    # last_sign_in_ip  :string(255) 
    # created_at    :datetime 
    # updated_at    :datetime 
    # name     :string(255) 
    # 

    class User < ActiveRecord::Base 
     # Include default devise modules. Others available are: 
     # :confirmable, :registerable, :timeoutable and :omniauthable 
     devise :database_authenticatable, :lockable, 
      :recoverable, :rememberable, :trackable, :validatable 

     has_many :account_users 
     has_many :accounts, through: :account_users 
     has_many :taxes, -> { uniq }, through: :accounts 

     validates :name, :email, presence: true, uniqueness: true 

     include Concerns::Roleize 
     roleize 

     def primary_account 
     self.accounts.first 
     end 
    end 

-

model/role.rb 
    # == Schema Information 
    # 
    # Table name: roles 
    # 
    # id   :integer   not null, primary key 
    # name   :string(255) 
    # resource_id :integer 
    # resource_type :string(255) 
    # created_at :datetime 
    # updated_at :datetime 
    # 

    class Role < ActiveRecord::Base 
     belongs_to :resource, polymorphic: true 
     before_create :tableize_name 

     def tableize_name 
     self.name = self.name 
     end 

     def self.method_missing(name, *args, &block) 
     roles = self.where(["name =?", name]) 
     if roles.any? 
      scope roles.first.name.to_sym, ->{roles.first} 
      return self.send(name.to_sym) 
     end 
     super 
     end 
    end 

回答

0

您是否嘗試過只使用基於user.role一個if/else語句?

- if @user.get_role == 'some_role' 
    = render 'some-logo' 
- elsif @user.get_role == 'other_role' 
    = render 'other-logo' 
- else 
    = render 'logo' 

user.rb

def get_role 
    Role.where(user_id: self.id).first 
end 
+0

我試圖這樣做,但我得到@ user.role錯誤。我如何知道調用角色的正確方式? – JHB

+0

好吧我只是注意到,因爲用戶沒有關聯'has_one:role',所以你不能使用'@ user.role'。如果你不想要這個關聯,你必須創建一個方法來檢查是否有'resource_id:== @ user.id'的作用,然後代替'@ user.role'運行方法'@user .find_role'或其他。只是要小心,它不會回零。 – Bw00d

+0

感謝您的明確迴應!我將它添加到代碼中,但現在我有一個與user_id相關的錯誤:PG :: UndefinedColumn:錯誤:列roles.user_id不存在 LINE 1:SELECT「roles」。* FROM「roles」WHERE「roles」。「 「USER_ID」= 5 ... ^ :SELECT「roles」。* FROM「roles」WHERE「roles」。「user_id」= 5 ORDER BY「roles」。「id」ASC LIMIT 1 – JHB