为什么我在Rails中没有得到方法错误?

时间:2017-05-12 06:53:17

标签: ruby-on-rails ruby

我的控制器就像这样 -

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'

2 个答案:

答案 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