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