rails check_box_tag для включения существующих значений из массива записей - PullRequest
1 голос
/ 28 апреля 2019

Следующий тег во вложенной форме

<%= check_box_tag "friend_ids[]", ff.id, @contentrestrictions.friends.include?(ff.id) %>

обрабатывает следующий массив записей

>> @contentrestrictions

[
#<Contentrestriction id: 29, usercontent_id: nil, friend_id: nil, created_at: "2019-04-28 10:55:32", updated_at: "2019-04-28 10:55:32">, 
#<Contentrestriction id: 30, usercontent_id: nil, friend_id: 2, created_at: "2019-04-28 10:55:32", updated_at: "2019-04-28 10:55:32">, 
#<Contentrestriction id: 31, usercontent_id: nil, friend_id: 4, created_at: "2019-04-28 10:55:32", updated_at: "2019-04-28 10:55:32">]

Даже после

class Contentrestriction < ApplicationRecord
  belongs_to :friend, optional: true

@contentrestrictions.любым из friend_id, friend_ids с добавлением или без [] все приводит к NoMethodError: неопределенный метод для Array.

как эта include функция может получить правильный массив для работы?

1 Ответ

1 голос
/ 28 апреля 2019

проблема в этой строке:

@contentrestrictions.friends.include?(ff.id)

вы сравниваете объект друга с идентификатором друга, вы можете использовать pluck, чтобы получить идентификаторы друзей, или вы можете просто сравнить объекты:

@contentrestrictions.friends.include?(ff)

это сделает запрос для .friends, и вы можете удалить этот запрос, предварительно загрузив ассоциацию friends, например, eager_load(:friends) или includes(:friends)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...