Activerecord Rails 4多对多关系

Activerecord Rails 4多对多关系,activerecord,ruby-on-rails-4,many-to-many,has-many-through,Activerecord,Ruby On Rails 4,Many To Many,Has Many Through,我有一个应用程序,它有两个需要多对多关系的模型。我最初试着使用has_和(你属于)(你属于)很多(你属于)(你属于)(你属于)很多(你属于。在网上搜索之后,我确信这不是我所需要的。所以,我换成了一个有很多通过的方法。然而,这也不起作用。我现在对这个问题感到非常困惑。我已经把它撕了很多次,并尝试了一个又一个教程,但都没有用 我试图连接的模型是Message和Author。在我最近的尝试中,我创建了一个名为Authoring的连接模型(带有相应的表)。这是我的密码: message.rb h

我有一个应用程序,它有两个需要多对多关系的模型。我最初试着使用has_和(你属于)(你属于)很多(你属于)(你属于)(你属于)很多(你属于。在网上搜索之后,我确信这不是我所需要的。所以,我换成了一个有很多通过的方法。然而,这也不起作用。我现在对这个问题感到非常困惑。我已经把它撕了很多次,并尝试了一个又一个教程,但都没有用

我试图连接的模型是Message和Author。在我最近的尝试中,我创建了一个名为Authoring的连接模型(带有相应的表)。这是我的密码:

message.rb

    has_many :authorings
    has_many :authors, through: :authorings
author.rb

    has_many :authorings
    has_many :messages, through: :authorings
authoring.rb

    belongs_to :message
    belongs_to :author
消息\u controller.rb

    def messages_params
        params.require(:message).permit(:title, :summary, :date, :duration, :youversion, :hours, :minutes, :seconds, :authors)
    end
我的留言表格:

    <%= f.label :speakers %><br /> 
    <%= collection_select(:authors, :authors, Author.all, :id, :name, {}, {:multiple => true, :size => 10}) %>
表单显然可以识别表单中的作者,但不会将他们保存在数据库中。什么是我的断开?请帮忙


谢谢

作者
记录未被创建,因为控制器希望
作者
出现在
消息
参数
散列中的键值中,但如果您注意到日志中的
参数
散列

参数:{“utf8”=>“✓", “真实性令牌”=>“OcLeke/eRRzwApoMSgQF81kBCm7TaGxW1PoVAUgEcvo=“, “消息”=>{…},“作者”=>{…},“提交”=>“我完成了”, “id”=>“1”}

您将看到
authors
params
散列中作为一个完全独立的键出现,这就是它被忽略的原因

您需要做的是将作者与
表单
对象关联,而不是使用
collection\u select
您需要使用
f.collection\u select
,如下所示。在
f.collection\u select
中指定第一个参数为
:author\u id

<%= f.collection_select(:author_ids, Author.all, :id, :name, {}, {:multiple => true, :size => 10}) %>
<%= f.collection_select(:author_ids, Author.all, :id, :name, {}, {:multiple => true, :size => 10}) %>
def messages_params
    params.require(:message).permit(:title, :summary, :date, :duration, :youversion, :hours, :minutes, :seconds, :author_ids => [])
end