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
我試圖這樣做,但我得到@ user.role錯誤。我如何知道調用角色的正確方式? – JHB
好吧我只是注意到,因爲用戶沒有關聯'has_one:role',所以你不能使用'@ user.role'。如果你不想要這個關聯,你必須創建一個方法來檢查是否有'resource_id:== @ user.id'的作用,然後代替'@ user.role'運行方法'@user .find_role'或其他。只是要小心,它不會回零。 – Bw00d
感謝您的明確迴應!我將它添加到代碼中,但現在我有一個與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