我有3个模型,分别为User,Role和UserRole,其控制器分别为UsersController,RolesController和UserRolesController。
我在UserRoles控制器中有一个方法,我想通过Users控制器进行访问,但是我仍然遇到错误,如下所述。
我尝试了各种方法,甚至将方法def self.add_roles_to_user(user, role)
从UsersRoles控制器移至UserRole模型并进行调用,但是我仍然遇到相同的错误。
我经历了很多类似的问题和各种博客,包括Calling a method from controller等平台上的博客,以及其他博客,但收效不佳。
class UserRole < ApplicationRecord
# many-to-many association using join table with roles and user
belongs_to :user, inverse_of: :user_roles
belongs_to :role, optional: true, inverse_of: :user_roles
end
class User < ApplicationRecord
has_many :user_roles, inverse_of: :user
has_many :roles, through: :user_roles
end
class Role < ApplicationRecord
# table associations between role and user
has_many :user_roles, inverse_of: :role
has_many :users, through: :user_roles
end
class UserRolesController < ApplicationController
def self.add_roles_to_user(user, role)
if ! user.nil?
if role.length > 0
role.each do |sel_role|
@u_role = UserRole.new
@u_role.user_id = user_id
@u_role.role_id = sel_role.role_id
@u_role.save
end
end
end
end
end
class Users::RegistrationsController < Devise::RegistrationsController
def create_user
respond_to do |format|
if @user.save
# add roles
UserRoles.add_user_roles(params[:user], params[:role])
end
end
end
end
添加或创建新用户时,我正在用户控制器中调用add_uer_to_role
方法。
我注意到的是,根据调用方法的方式,我不断遇到不同的错误。
例如,当我调用类似的方法时,我希望没有错误; UserRoles.add_roles_to_user(params[:user], params[:role])
,但出现错误NameError (uninitialized constant Users::RegistrationsController::UserRoles):
希望一个好的撒玛利亚人会尽快帮助我。预先感谢
答案 0 :(得分:0)
如果它是通用函数,则可以在应用程序控制器中定义它并调用它。另外,您可以在助手中定义。
请验证Calling a method from another controller
您可以将该函数用作模块并使用它:
# lib/common_stuff.rb
module CommonStuff
def common_thing
# code
end
end
# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
include CommonStuff
# has access to common_thing
end