如何在Rails应用程序中将条件重定向写入模型的create方法?

时间:2010-07-10 18:09:07

标签: ruby-on-rails redirect

我允许用户在应用中的不同页面创建“问题”,并希望在保存新问题后将其重定向到正确的页面。由于一个页面有一个参数[: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 :(得分:0)

依靠params beings nil非常尴尬。您可以控制所提交的表单,因此您只需自己发送一个额外的参数来识别它的来源。

其他一些事情:

如果您只回复html,请不要打扰使用respond_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