RoR Active Records未定义的方法

时间:2017-08-18 22:57:21

标签: ruby-on-rails ruby ruby-on-rails-5

我创建了两个模型User和Server但是当我尝试向服务器添加数据时,我无法得到我想要的结果。当我在Rails控制台上尝试这个时,我没有收到任何错误。这让我头脑发疯了2天了。尝试了很多东西。

user.rb

class User < ApplicationRecord
   belongs_to :server
end

用户迁移

class CreateUsers < ActiveRecord::Migration[5.0]
  def change
    create_table :users do |t|
      t.integer :channel_id
      t.timestamps

    end
  end
end

server.rb

class Server < ApplicationRecord
has_many :user
end

服务器迁移

class CreateServers < ActiveRecord::Migration[5.0]
  def change
    create_table :servers do |t|
      t.string :name
      t.timestamps
    end
  end
end

我的控制器:

def alert(args)
 @server =  Server.where(name: args)
   if @server == []
     Server.create(name: args)
     respond_with :message, text: t('.bildirim_on')
   else
   end
     @user = @server.user.create(channel_id: 215682104)
end

我收到此错误:

  Server Load (0.1ms)  SELECT "servers".* FROM "servers" WHERE "servers"."name" = ?  [["name", "videoyun"]]
Completed in 28ms (ActiveRecord: 0.8ms)
undefined method `user' for #<Server::ActiveRecord_Relation:0x00000004dae158>

2 个答案:

答案 0 :(得分:3)

这是因为@serverActiveRecord_Relationship,而不是Server实例。您应该使用Server.find_by(name: args)并在创建之前检查是否.present?(它将返回Server实例或nil,而不是ActiveRecord关系)。

此外,您应该在if语句中为@server分配新的。

答案 1 :(得分:0)

class Server < ApplicationRecord
 has_many :user
end

:user应为:users