2016-12-16 4 views
0

У меня есть URLПопутный форма PARAMS к url_for/redirect_to/рендеринга

get '/vacancies/:id(/:mode)', to: 'vacancies#show', as: 'vacancy', constraints: { mode: /(resume|file)/} 

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

Как я могу реализовать этот материал?

upd1

Типичные рельсы решение для этого что-то вроде render :new или render :edit, но в моем случае я не могу сделать, потому что render :show оказывает вид на '/vacancies/:id маршрут не '/vacancies/:id(/:mode).

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

Я предполагаю, что есть решение внутри response объекта, но еще не нашел

UPD2

class VacanciesController < ApplicationController 
    # vacancies/:id - is just show view 
    # vacancies/:id/resume - is show view with form 
    # vacancirs/:id/file - is show view with form for sending pdf|doc|etc 
    def show 
    @vacancy = Vacancy.find(params[:id]) 
    end 

    def create 
    if Vacancy::SaveResume.new(resume_params).call.valid? 
     redirect_to vacancies_path 
    else 
     # didn't know what to do there 
    end 
    end 
end 
+0

Это очень простой материал Rails. Я предлагаю прочитать [это руководство] (http://guides.rubyonrails.org/action_controller_overview.html) прочитанное, а затем опубликовать более подробный вопрос, если вы все еще застряли. – Thilo

+0

@Thilo Я только что обновил сообщение – DmitrySharikov

+0

, вам лучше использовать ajax в этом конкретном случае. – Ilya

ответ

0

В контроллере, для того, чтобы поддерживать этот Params, вы бы вновь сделать тот же вид вместо перенаправления. Это происходит очень часто с новым и создающим действием, но тот же принцип применяется в любом месте, например, отображение формы в действии show.

class PostsController < ApplicationController 
    def new 
    @post = Post.new 
    render :new 
    end 

    def create 
    @post = Post.new(params[:post]) 
    if @post.save 
     redirect_to :show 
    else 
     render :new # re-render another template 
    end 
    end 
end 
+0

Не работал для меня – DmitrySharikov

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