Ruby on rails 如何将条件重定向写入模型';s在Rails应用程序中创建方法?

Ruby on rails 如何将条件重定向写入模型';s在Rails应用程序中创建方法?,ruby-on-rails,redirect,Ruby On Rails,Redirect,我允许用户从应用程序中的不同页面创建“问题”,并希望在保存新问题后将他们重定向到正确的页面。因为一个页面有一个params[:id],而另一个没有,所以我想我应该用它来区分不同的重定向 以下是我在问题控制器中试图做的: respond_to do |format| if @question.save if params[:id].nil? format.html {redirect_to :controller => 'home', :action => 's

我允许用户从应用程序中的不同页面创建“问题”,并希望在保存新问题后将他们重定向到正确的页面。因为一个页面有一个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

非常感谢,我还是个新手。

依赖params-beings-nil是非常尴尬的。您可以控制正在提交的表单,所以只需自己发送一个额外的参数来标识它的来源

还有几件事:

如果您只使用html进行响应,那么不必麻烦执行respond_to block

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

你得到了什么结果?我认为它不起作用,但你有错误吗?它总是转到同一页吗?需要更多的细节。您所说的“发送(设置?)一个额外的参数以确定其来源”是什么意思?我可以运行迁移,向问题模型添加一个额外的属性(例如:type_of_question),然后在表单中设置该属性的值,但这真的有必要吗?它不必是问题模型的属性。您可以执行类似于
hidden\u field\u tag'source',page1'
的操作,您可以使用
params[:source]
访问这些操作。因为这不是作为
params[:question]
的一部分传递的,所以它不需要问题模型上的
attr\u accesor
。@kateray很棒。如果您没有更多问题,并且一切正常,请接受答案。嗯,有一个问题:当出现错误时,我不能说'render:action=>:new',因为我需要重定向回正确保存问题时所做的相同位置。但是,调用“重定向”而不是“渲染”似乎会使我丢失所有自定义错误消息(如此处发生的情况:)。我知道这是一个稍微不同的问题。。。。