response_with перенаправляет в указанное местоположение даже при ошибках валидации в rails3

При использовании местоположения в ответе он игнорирует ошибки проверки и перенаправляет в указанное местоположение. Это ожидаемое поведение?

Я проверил в модуле респондента, что он проверяет, есть ли какие-либо ошибки в модели. Я проверил модель, и она содержит ошибки проверки в объекте @solution. Что мне здесь не хватает?

контроллер:

def create
  @problem = Problem.find(params[:problem_id])
  @solution = @problem.solutions.build params[:solution]
  @solution.save
  respond_with(@solution, :location => detail_problem_solution_path(@problem, @solution)
end

модель:

  validates :body, :presence => true, :unless => :reference

ссылка является истинной или ложной ложной.

2 ответа

Я столкнулся с этой проблемой сегодня, и столкнулся с этой проблемой Rails на github. Кажется, исключение выдается, поскольку помощник по маршруту не может сгенерировать допустимые для несохраненных (недействительных) записей.

Существует дискуссия по проблеме github о разрешении использования procs в качестве аргумента параметра location, но не похоже, что он будет добавлен в ближайшее время.

Сейчас я буду придерживаться следующего решения:

def create
  @post = Post.new(params[:post])
  if @post.save
    respond_with(@post, location: edit_post_path(@post))
  else
    respond_with @post
  end
end

Единственный способ, которым я смог решить это:

  def create
    @problem = Problem.find(params[:problem_id])
    @solution = @problem.solutions.build solution_params
    success = @solution.save
    respond_with(@solution) do |format|
      format.html {redirect_to detail_problem_solution_path(@problem, @solution) } if success
    end
  end
Другие вопросы по тегам