2013-03-15 7 views
0

Здесь находится посылка:Редактирование reply_to in Rails 3

У меня есть модель под названием «Правила», которая имеет соответствующий контроллер и вид. Я хочу, чтобы пользователь мог создать новое правило из своей панели мониторинга, которая имеет отдельный вид и контроллер.

Приборная панель имеет три вкладки под названием «Правила», «Rulesets, и„Игры“. Каждая вкладка имеет свой собственный частичное, так и для правил я использую _rules.erb частичный, который выглядит как этот

<div id="dashboard-rules" class="dashboard-panel ui-nav-panel"> 
    <%= button_to'Create A Rule', '#', id: "create-rule-btn", class: "btn btn-primary" %> 

    <div id="create-rule-form-container"> 
    </div> 

... 

</div> 

Использование JQuery, я загружать содержимое страницы New Rules, который управляется контроллером правил, как это ...

$('#create-rule-btn').click (e) -> 
    e.preventDefault() 
    $('#create-rule-form-container').load('/rules/new.html .form-horizontal') 

это загрузит только форма из правил/new.html. Моя проблема заключается в том, что когда я нажимаю кнопку «Сохранить правило», она перенаправляет URL-адрес/rules, а затем либо отображает erro rs или говорит «Правило сохранено успешно». Я бы хотел, чтобы он не перенаправлялся и ошибки отображались на панели управления ... опять же, а не перенаправлял URL-адрес/rules.

Это мои правила создают действия, которые я думаю, что нужно изменить, я просто не знаю, как:

def create 
    @rule = Rule.new(params[:rule]) 

    respond_to do |format| 
    if @rule.save 
     format.html { redirect_to @rule, notice: 'Rule was successfully created.' } 
     format.json { render json: @rule, status: :created, location: @rule } 
    else 
     format.html { redirect_to :controler => "dashboard"} 
     format.json { render json: @rule.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Я знаю, что я должен возиться с тем, как respond_to работает, я просто не» не знаю как.

ответ

0

Помните, что вам нужно установить всю переменную, установленную в панели управления, в действие create, чтобы следующее работало. Это связано с тем, что вы создаете тот же шаблон, что и панель инструментов, поэтому вам нужно снова установить переменные.

if @rule.save 
    format.html { redirect_to dashboard_path, notice: 'Rule was successfully created.' } 
    format.json { render json: @rule, status: :created, location: @rule } 
else 
    # initialize the variables needed on the dashboard here 
    format.html { render template: 'dashboard/index' } 
    format.json { render json: @rule.errors, status: :unprocessable_entity } 
end 

Еще одно решение - отправить форму через ajax и просто обновить страницу при сохранении правила.

UPDATE: быстрое решение JS

в форме, которая создает правила, добавьте следующие

form_for @rule, html: { remote: true } do |f| 

Это отправить форму через AJAX. В контроллере, добавьте format.js строку после каждого format.json

format.json { ... } 
format.js 

затем создать файл с app/views/rules/create.js.erb (или HAML). В этом файле вы можете добавить любые JS вы хотите, чтобы добавить следующее

<% if @rule.errors.any? %> 
    # add js here to append the errors in the page 
<% else %> 
    window.location.reload 
<% end %> 
+0

Хорошо, так что я добавил переменные из контроллера Dashboard в Правила создания действия в правилах контроллера и использовать код при условии. Редирект работал так спасибо за это! Однако, поскольку он создает новый HTTP-запрос и обновляется до основного индекса панели, я теряю форму, которая была добавлена ​​путем вызова jQuery.load AJAX. Я думаю, может быть, ваше последнее предложение может быть лучше. Не уверен, как это сделать. –

+0

Я добавил быстрое решение js. надеюсь, вы можете понять остальное :) – jvnill

+0

Хммм, я думаю, что это на правильном пути. Теперь он отправляется через AJAX, но я вообще не получаю никаких сообщений об ошибках или успехе, и он не сохраняет данные в базе данных. –