Rails RESTful контроллер и рендеринг после пользовательских действий - PullRequest
2 голосов
/ 04 декабря 2008

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

У меня есть контроллер со стандартными действиями, и я добавил специальное действие, которое добавляет данные к рассматриваемому ресурсу через форму на странице #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

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

Ответы [ 2 ]

2 голосов
/ 04 декабря 2008

Лучший способ это сделать заново: 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 %>

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

0 голосов
/ 04 декабря 2008

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

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

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

...