2015-04-20 3 views
0

У меня есть модель DiscountCode с атрибутом кода (строка). Моя модель бронирования принадлежит_to: discount_code. В форме бронирования, я не хочу, чтобы положить ниспадающее меню, чтобы выбрать DiscountCode, я просто хочу строковое поле (с использованием SimpleForm):Rails form использовать текстовое поле для объекта

f.input :discount_code 

, где пользователь может ввести, например, «XMAS2015». Я поворачиваюсь строка в объекте DiscountCode в контроллере:

new_params[:discount_code] = DiscountCode.find_by code: params[:booking][:discount_code] 

... и я использую new_params построить бронирование. Если ошибок нет, все идет хорошо, но если есть и форма снова отображается поле строка заполняется объект вместо кода:

#<DiscountCode:0x0000000baf2d68> 

Я не могу повернуть его назад, как это:

@booking.discount_code = @booking.discount_code.code 

потому что @ booking.discount_code должен быть DiscountCode, а не строкой.

Есть ли какое-либо решение для изменения объекта обратно в строку в форме или мне нужно использовать другое имя поля, например discount_code_text?

ответ

1

Да, просто установите его в текст и добавить надлежащее input_html значения:

= f.input :discount_code, as: :text, input_html: { value: '' } 
+0

Отлично, спасибо. – edhel

0

вы можете использовать DISCOUNT_CODE поля в таблице бронирования как есть has_one отношение и только один атрибут в качестве кода.

Способ, которым вы сейчас пользуетесь, применим только в том случае, если у вас больше атрибутов в контексте booking_code.

Смежные вопросы