rails: попытка сопоставить два значения в массиве, получение неподдерживаемого типа аргумента: ошибка хеширования - PullRequest
0 голосов
/ 06 января 2019

У меня есть два поля в двух разных моделях, которые хранят значения местоположения в массиве, и я пытаюсь добиться переменной экземпляра контроллера, которая может соответствовать любым одинаковым значениям в обоих массивах, а затем отображать это в представлении индекса. Тем не менее, когда я пытаюсь этот код

@submissions = Submission.select(Desired_Location: current_agent.Company_Business_Location)

выдает эту ошибку:

Unsupported argument type: Hash. Construct an Arel node instead

Схема представления:

create_table "submissions", force: :cascade do |t|
t.string "First_Name"
t.string "Last_Name"
t.integer "Phone"
t.string "Email"
t.string "Desired_Location"
t.integer "number_of_beds"
t.integer "number_of_occupants"
t.integer "Rent_price_per_month_gbp"
t.date "Max_move_in_date"
t.string "Tenant_Occupation"
t.string "Contact_me_on"
t.boolean "Furnished"
t.string "Current_Address"
t.text "Property_Requirements"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "location_id"
t.index ["location_id"], name: "index_submissions_on_location_id"
t.index ["user_id"], name: "index_submissions_on_user_id"
 end

Схема агента:

create_table "agents", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "Company_Name"
t.string "Company_Email"
t.string "Company_Phone"
t.string "Company_Address"
t.string "Company_Business_Location"
t.string "Contact_Name"
t.string "Contact_Email"
t.string "Contact_Phone"
t.integer "location_id"
t.index ["email"], name: "index_agents_on_email", unique: true
t.index ["location_id"], name: "index_agents_on_location_id"
t.index ["reset_password_token"], name: 
"index_agents_on_reset_password_token", unique: true
 end

Пример хранения данных в полях Desired_Location и Company_Business_Location:

["", "Abbey Wood", "Acton", "Anerley", "Angel"]

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Для совпадения с одинаковыми значениями массива в запросе rails, Вы можете использовать ANY of postgres в рельсах

Submission.where(? = ANY(Desired_Location)", current_agent.Compay_Business_Location)

Подробнее здесь http://www.postgresqltutorial.com/postgresql-any/

0 голосов
/ 07 января 2019

Если Desired_Location является именем поля в модели отправки, используйте метод выбора, как показано ниже. Метод выбора не примет хеш в качестве аргумента.

Вы можете передать блок, чтобы проверить условие и получить желаемый результат. Использовать сортировку по массиву, чтобы сделать массив идентичным, если он расположен по-разному, несмотря на то, что содержит все элементы.

desired_loc_arr = current_agent.Company_Business_Location
@submissions = Submission.select { |sub| sub.Desired_Location.sort == desired_loc_arr.sort }
...