Ruby on rails 如何修复rails中has_和_属于_的错误

Ruby on rails 如何修复rails中has_和_属于_的错误,ruby-on-rails,has-and-belongs-to-many,Ruby On Rails,Has And Belongs To Many,我想在联接表中创建一个记录,但rails在两种情况下显示了两个错误,我不想生成第三个模型 @channel = Channel.find(params[:channel_id]) if @channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id]) flash[:success] = "U Succeed:)" redirect_to request.referrer e

我想在联接表中创建一个记录,但rails在两种情况下显示了两个错误,我不想生成第三个模型

@channel = Channel.find(params[:channel_id])
 if @channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
     flash[:success] = "U Succeed:)"
     redirect_to request.referrer
 else
     flash[:danger] = "U Nit Succeed:H"
     redirect_to request.referrer
 end
第二种情况

 if Channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
     flash[:success] = "U Succeed:)"
     redirect_to request.referrer
 else
     flash[:danger] = "U'r Not Succeed:H"
     redirect_to request.referrer
 end
我想在联接表中保存属性。根据rails官方网站指南,出了什么问题

第一个错误:

用户的未知属性“channel\u id”

第二个错误:

类0x00007feaa0312058的未定义方法“users”


我假设你们有这样的联系:

class User < ActiveRecord::Base
  has_and_belongs_to_many :channels
end

class Channel < ActiveRecord::Base
  has_and_belongs_to_many :users
end
这将尝试创建一个新的
User
类对象,因为中间没有模型,只有一个中间表。相反,您可以这样做:

@channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
# If you don't have the user object already
user = User.find params[:user_id]

# This will create a record in the mid table
@channel.users << user
@channel.users = user
Channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
这将从该频道的mid表中删除所有现有关联用户记录,并添加与该用户关联的新记录

当你尝试这样做时:

@channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])
# If you don't have the user object already
user = User.find params[:user_id]

# This will create a record in the mid table
@channel.users << user
@channel.users = user
Channel.users.create!(channel_id: params[:channel_id], user_id: params[:user_id])

这根本无效,因为类
频道
用户
没有任何直接关系,但是
频道
类的实例可能与
用户
类的实例相关联。

对于第一个场景,我建议您像这样做

@channel.user_ids = @channel.user_ids  + [params[:user_id]]

它将创建联接表记录,您当然可以根据自己的需要尝试优化方法。

您可以使用推送,或者发布每个模型的代码?同样对于第二个场景,对于Class0x00007,它是一个
未定义的方法“users”。
bc关联在通道实例上,而不是类本身。是的,它是相同的代码。这是工作,没有错误。但是用户id和频道id会互相保存,谢谢。这项工作就像上面的解决方案,没有错误,但我提到的同样的问题仍然存在