Как написать условное перенаправление в метод создания модели в приложении Rails? - PullRequest
1 голос
/ 10 июля 2010

Я разрешаю пользователям создавать «Вопрос» на разных страницах приложения и желать, чтобы они перенаправлялись на нужную страницу после сохранения нового вопроса.Поскольку на одной странице есть параметры params [: id], а на другой - нет, я подумал, что смогу использовать это для различения различных перенаправлений.

Вот что я пытался сделать в моем контроллере вопросов:

respond_to do |format|  
if @question.save
    if params[:id].nil?
      format.html {redirect_to :controller => 'home', :action => 'show', :username => question.directed_to}  
    else
      format.html {redirect_to :controller => 'mentions', :action => 'show', :id => question.topic}
    end    
else
    ...
end

Большое спасибо, я все еще новичок в этом.

1 Ответ

0 голосов
/ 10 июля 2010

Полагаться на params существа ноль супер неловко. Вы можете контролировать отправляемые формы, поэтому просто отправьте дополнительный параметр, который определяет, откуда он поступает.

Несколько других вещей:

Если вы отвечаете только с помощью html, не беспокойтесь о создании блока response_to.

if @question.save
  redirect_to :controller => 'home', :action => 'show', :username => question.directed_to
else
  redirect_to :controller => 'mentions', :action => 'show', :id => question.topic
end

@question.save не запускает проверки. Довольно необычно, что вы хотите создать действие, которое не запускает проверки. Вы, вероятно, должны иметь что-то вроде:

def create
  @question = Question.new(params[:question])
  @question.save!
  flash[:notice] = "Question saved successfully"
  # Do your redirects here
rescue ActiveRecord::RecordInvalid
  flash[:error] = "There were errors saving your question"
  render :action => :new
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...