2016-01-11 5 views
0

Я использую этот путь: new_inspiration_path(inspiration_id: inspiration.id), чтобы взять информацию из существующего вдохновения и предварительно заполнить новую форму, чтобы пользователь мог дублировать вдохновение, просто щелкнув маршрут пути, а затем отправьте..find & .built с новым?

Но моя проблема заключается в том, что после подачи формы новое вдохновение не создается.

def new 
    if params[:inspiration_id] 
     @inspiration = Inspiration.find(params[:inspiration_id]) 
    end 
    @inspiration = current_user.inspirations.build 
    end 

    def create 
    @inspiration = current_user.inspirations.build(inspiration_params) 
    @inspiration.save 
    end 

Это происходит потому, что @inspiration застрял пытается сделать две разные вещи: .find и .built. Как мы можем сделать оба, когда params[:inspiration_id]?

Вопрос вдохновленный: How to prepopulate form with data passed from @object?

ответ

0

Ваш код, как показано на рисунке, не используя @inspirational. Вам необходимо пройти @inspirational.attributes.slice(Inspiration.attribute_names)Inspiration.new скопировать все соответствующие атрибуты для нового объекта:

if params[:inspiration_id] 
    @inspirational = Inspiration.find(params[:inspiration_id]) 
    inspirational_attributes = @inspirational.attributes.slice(Inspiration.attribute_names) 
end 

@inspiration = current_user.inspirations.new(inspirational_attributes) 

Конечно, убедитесь, что inspirational_attributes установлен в {} когда params[:inspiration_id] не установлен.

+0

Это была опечатка. Я хотел сказать просто «вдохновение» для всех, но, возможно, это сработает, если я сделаю различие с использованием «вдохновения» и «вдохновения». Я подключил ваш код как есть и, сняв конец 'al' с' inspirational', но в любом случае код не заполняет _form. Возможно, это потому, что я не понимаю ваш «конечно» абзац. Извините, пожалуйста, подробно изложите Лейто? Большое спасибо за помощь человеку! –

+0

Вы говорите, что форма не заполняется, но у inspirational_attributes есть значения, которые вы хотите? Нам нужно убедиться, что он работает, прежде чем беспокоиться о форме. Я просто имел в виду, что 'inspirational_attributes = {}' должен быть до 'if', поэтому вы не получите« NameError: неопределенная локальная переменная или метод 'inspirational_attributes» – Leito

+0

Да, я просто помещаю 'Inspiration.name' для 'attribute_names', и когда я нажимаю на путь, я переношу в новую _form, где она остается незаселенной. Ошибок не возникает. И спасибо за разъяснение Leito :) –

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