我的控制器就像这样 -
def show
if authenticated_user
render json: @authenticated_user.users_organisation.as_json(
only: [:id, :user_id]
),
status: :ok
else
render json: { errors: { authentication_token: 'Invalid' } },
status: :unauthorized
端 端
authenticated_user正常运行,因为我测试了它,另一个表叫做users_organisation。
我尝试创建这样的用户 -
@user = User.where(email:"test@test.com")
然后我打电话
render json: @user.users_organisation.as_json(
only: [:id, :user_id]
),
status: :ok
and then when I run it, there are no errors and it works
我得到的错误跟踪是 -
NoMethodError in Api::V1::UserTest#show
undefined method `users_organisation' for #
<User::ActiveRecord_Relation:0x007fc59a47c798>
app/controllers/api/UserTest.rb:27:in `show'
config/initializers/quiet_assets.rb:7:in `call_with_quiet_assets'
答案 0 :(得分:2)
我尝试创建这样的用户 -
@user = User.where(email:"test@test.com")
where
不会创建用户,而是返回关系。更具体地说,您的代码返回email
"test@test.com"
的所有用户(相互关系),相当于:
SELECT * FROM users WHERE email = 'test@test.com';
此外,该关系不响应users_organisation
,因此您获得了NoMethodError
。
要创建新用户,请致电create
:
@user = User.create(email: 'test@test.com')
#=> #<User id: 1, email: "test@test.com">
它会返回User
的实例,该实例会响应users_organisation
。 (虽然对于新用户来说可能是空的)
答案 1 :(得分:0)
@user = User.where(email:"test@test.com").first
您收到的错误表示您正试图访问users_organisation
上的ActiveRecord_Relation