调用关联的控制器方法不起作用
Calling a Associated Controller Method Not Working
我有 3 个模型,分别是 User、Role 和 UserRole,它们各自的控制器分别是 UsersController、RolesController 和 UserRolesController。
我在 UserRoles 控制器中有一个方法,我想通过用户控制器访问它,但我一直遇到错误,如下所述。
我尝试了各种方法,甚至将 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
方法。
我注意到,根据调用方法的方式,我不断收到不同的错误。
例如,我希望调用like方法时不会出错; UserRoles.add_roles_to_user(params[:user], params[:role])
但它给出错误 NameError (uninitialized constant Users::RegistrationsController::UserRoles):
希望好心人尽快来救我。提前致谢
如果是普通函数,可以在application controller中定义并调用。否则你可以在 helper.
中定义
请验证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
我有 3 个模型,分别是 User、Role 和 UserRole,它们各自的控制器分别是 UsersController、RolesController 和 UserRolesController。
我在 UserRoles 控制器中有一个方法,我想通过用户控制器访问它,但我一直遇到错误,如下所述。
我尝试了各种方法,甚至将 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
方法。
我注意到,根据调用方法的方式,我不断收到不同的错误。
例如,我希望调用like方法时不会出错; UserRoles.add_roles_to_user(params[:user], params[:role])
但它给出错误 NameError (uninitialized constant Users::RegistrationsController::UserRoles):
希望好心人尽快来救我。提前致谢
如果是普通函数,可以在application controller中定义并调用。否则你可以在 helper.
中定义请验证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