我允许用户在应用中的不同页面创建“问题”,并希望在保存新问题后将其重定向到正确的页面。由于一个页面有一个参数[: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
非常感谢,我还是新手。
答案 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