私は2つのモデルのユーザーとサーバーを作成しましたが、サーバーにデータを追加しようとしたときに、私が望む結果を得ることができません。これをRails Consoleで試したところ、エラーは発生していません。これは今、私の頭を2日間狂っています。たくさんのことを試しました。RoR Active Records未定義のメソッド
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
Server移行
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>
でなければなりません。しかし、なぜ 'Server.where(name:* args)'が動作していないのか、 'Server.find_by'が働いています。私はまだ彼らの違いを理解することができませんでした。 –
'where'はサーバの配列(配列インスタンスではありませんが似ています)を返し、' find_by'はサーバのインスタンスを返します(配列の代わりに)。 –