2013-05-20 1 views
0

У меня есть следующий код для создания продукта:Рубин на Rails: Создать представление подтверждения перед созданием объекта

def create 
    @customer = Customer.find(params[:customer_id]) 
    @product = @customer.products.build(params[:product]) 

    respond_to do |format| 
     if @product.save 
     format.html { redirect_to customer_products_path(@customer), notice: 'Product was successfully created.' } 
     else 
     format.html { render action: "new" } 
     format.json { render json: customer_products_path.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Чтобы сгенерировать форму я использую:

<%= form_for([@customer, @product]) do |f| %> 

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

Я рассмотрел другие вопросы о stackoverflow, но не смог создать то, что хочу. Любые рекомендации приветствуются.

+0

Я думаю, что лучше обратиться к диалоговому окну подтверждения на стороне клиента с помощью библиотек на стороне клиента javascript. –

+0

Я не очень хорошо разбираюсь в JS. Можете ли вы указать на какой-то справочник или другие подобные указатели? – psharma

+1

Диалог подтверждения JQuery UI - это просто вариант из большого пула опций. –

ответ

1

Если вы хотите сделать подтверждение на стороне клиента, вам необходимо использовать JavaScript для прослушивания на мероприятии 'submit submit'. Затем вы используете jQuery html(), чтобы показать лайтбокс, который просит продолжить или нет. Он будет связан с using onsubmit event и rendering a confirmation box. Обсуждается другой способ с атрибутами данных here

Если вы хотите отслеживать базу данных для подтверждения (на стороне сервера), вы можете отобразить свою модель в действии «показать», но с другим набором кнопок.

На ваш взгляд шоу, вы бы тогда сделать:

<% if @product.confirmed? %> 
    ... # normal path to actions for show (edit, delete, back) 
<% else %> 
    <%= link_to "Confirm', confirm_product_customer_path(@product, @customer) %> 
<% end %> 

Однако, имея атрибут для подтверждения в базе данных, иногда это немного перебор. Как говорит Яни в комментариях, подтверждение на стороне клиента для большинства случаев достаточно хорошее.

+0

Если он переходит к методу 'show', запись создается. Что делать, если пользователь не хочет действовать после отображения страницы подтверждения? :) – psharma

+0

Правильно, с этим вы создаете модель и затем подтверждаете ее. Иногда это необходимо, когда пользователь совершает транзакцию. Если вы не хотите писать в базу данных, вам необходимо подтверждение на стороне клиента, например. с лайтбокс. – poseid

+0

Хорошо, я добавил несколько ссылок на рендеринг на стороне клиента. Этот ответ лучше? – poseid

1

Вы можете использовать новую кнопку с параметром:

<%= f.submit %> 
    <%= f.submit "Preview", :name => 'preview' %> 

и в контроллере, в создании действия:

if params[:preview] 
@product = Product.new(params[:product]) 
render 'products/previw' 
else 
# save your object 
end 

и создать новый частичный для предварительного просмотра.

+0

Что именно происходит внутри '# твоей вещи'.? – psharma

+0

- Я создаю новый просмотр представлений 'products/preview.html.erb' - Как бы я сохранил всю дату в режиме предварительного просмотра в моей БД в качестве шага подтверждения? – egyamado

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