У меня есть модель с именем Article
, другая модель с именем Organization
и таблица соединений с именем ArticleAllowedOrganization
, в которой есть article_id и organization_id.
Когда пользователь создает статью, я бы хотел, чтобы он указал, какие организации должны иметь доступ к этой статье.
Когда я тестирую в консоли, кажется, что он работает правильно, однако, когда я создаю статью в веб-приложении, параметры для сквозной ассоциации allowed_organization_ids
пустые.
Модель статьи:
class Article < ActiveRecord::Base
has_many :article_allowed_organizations, dependent: :destroy
has_many :allowed_organizations, through: :article_allowed_organizations, source: :organization
end
Модель организации:
class Organization < ActiveRecord::Base
has_many :article_allowed_organizations, dependent: :destroy
has_many :allowed_articles, through: :article_allowed_organizations, source: :article
end
таблица соединений:
class ArticleAllowedOrganization < ActiveRecord::Base
belongs_to :article
belongs_to :organization
end
в article_controller.rb Я разрешил массив для allow_organization_ids
def article_params
params.require(:article).permit(:other_stuff, :allowed_organization_ids => [])
end
В форме:
<%= f.collection_select(:allowed_organization_ids, Organization.order(:name), :id, :name,
{include_blank: true}, {multiple: true}) %>
В консоли я могу вручную установить несколько идентификаторов организации, которые будут связаны со статьей, и это работает.
a = Article.last
a.allowed_organization_ids = [2, 4]
ниже вы можете видеть, что он вставляет идентификаторы для организации в таблицу ArticleAlllowedOrganization при использовании консоли.
(0.3ms) BEGIN
SQL (1.3ms) INSERT INTO "article_allowed_organizations" ("article_id", "organization_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["article_id", 95], ["organization_id", 4], ["created_at", "2018-12-12 17:47:25.978487"], ["updated_at", "2018-12-12 17:47:25.978487"]]
(6.5ms) COMMIT
=> [2, 4]
при использовании веб-приложения я получаю это вжурнал, где allowed_organization_ids
ничего не передает.
Parameters: {"....some_other_params" "allowed_organization_ids"=>[""]}
, если я пытаюсь использовать collection_check_boxes
<%= f.collection_check_boxes :allowed_organization_ids, Organization.all, :id, :name do |b| %>
<div class="collection-check-box">
<%= b.check_box %>
<%= b.label %>
</div>
<% end %>
Я получаю это в журнале при использовании collection_check_boxes
, гдевместо идентификаторов организации указано true
"allowed_organization_ids"=>["true"]
также интересно то, что я также получаю в журнале нижеприведенное письмо, когда пытаюсь использовать флажки, когда пытается найти организацию с идентификатором 0, но можетт, который препятствует отправке формы.
[1m[35mOrganization Load (0.5ms)[0m SELECT "organizations".* FROM "organizations" WHERE "organizations"."id" = $1 LIMIT 1 [["id", 0]]
Completed 404 Not Found in 67ms (ActiveRecord: 2.4ms)
ActiveRecord::RecordNotFound (Couldn't find Organization with 'id'=0):