Rails RESTful контроллер и рендеринг после пользовательских действий

StackOverflow https://stackoverflow.com/questions/341571

Вопрос

Как я могу выполнить рендеринг после выполнения действия в успокоительном контроллере вместо перенаправления.

У меня есть контроллер со стандартными действиями, и я добавил специальное действие, которое добавляет данные к рассматриваемому ресурсу через форму на странице #show (подумайте о комментариях к сообщению). Я проверяю входные данные из формы и хочу повторно отобразить действие show в случае ошибки и перенаправить действие show в случае успеха.

Я хочу выполнить рендеринг, чтобы пользователь дважды не вводил свои данные, но при попытке рендеринга действия show с ошибкой во флеш-памяти [: note] я получаю сообщение о том, что я не указываю идентификатор. Когда я указываю идентификатор, он пытается отобразить новый шаблон, который еще не существует.

Я думаю, что это должно быть так же просто, как:

def add_comment
  if my_validation?
    save the object
    redirect_to :action => "show", :id => params[:id]
  else
    render :action => "show", :id => params[:id]
  end
end

Это не мой настоящий код, просто то, что я сейчас собрал в качестве примера.

Это было полезно?

Решение

Лучший способ - перерисовать: new

def create
  @obj = TheObject.new(params[:object])
  render :action => :new unless @obj.save
end

И в new.html.erb

<% form_for :obj, 
  :url => object_url(@obj), :html => {:method => :post} do |f| %>

  <%= f.text_field :name %>
<% end %>

Таким образом, входные данные в форме будут предварительно заполнены данными, введенными пользователем.

Другие советы

Создайте новый объект данных и добавьте значения из формы, прежде чем выполнять повторное рендеринг, подумайте, что тогда он будет работать. Если проблемы по-прежнему возникают, попробуйте установить логическое значение для редактирования новых и существующих строк или полностью создать два разных представления.

Я делал это раньше, но я не совсем помню как. Иногда, когда я использовал очень типичное использование шаблона MVC, все это было & Quot; automagical & Quot; в других случаях (поскольку мне приходилось использовать старую причудливую базу данных), мне приходилось кодировать всю магию самостоятельно; иногда используя функцию .new? (или как она была вызвана) объекта ActiveRecord, иногда я использовал временные " магические значения " для идентификатора (обычно буквенные строки для недопустимых значений идентификатора.

(я извиняюсь, если допустил некоторые ошибки, прошло некоторое время с тех пор, как я написал код Rails ...)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top