【问题标题】:How render to another view other than the default view如何渲染到默认视图以外的另一个视图
【发布时间】:2014-12-07 15:42:44
【问题描述】:
如果不是由我创建的另一个视图,例如 new_form.html.erb,我需要块 respond_to 不渲染到 new.html.erb
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @user }
end
end
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-3
ruby-on-rails-4
ruby-on-rails-3.2
【解决方案1】:
很简单。只要视图位于控制器的默认目录中:
respond_to do |format|
format.html render 'new'
format.json { render json: @user }
end
如果不是,你需要告诉它是哪个目录:
respond_to do |format|
format.html render 'users/new'
format.json { render json: @user }
end
更多文档在这里:http://guides.rubyonrails.org/layouts_and_rendering.html
【解决方案2】:
有很多方法可以做到这一点......
##FOR HTML CALLS
format.html { render 'new'}
format.html { render 'shared/new'}
##FOR JS CALLS
format.js { render 'new'}
format.js { render 'shared/new'}
##pass variable to the view
format.js { render 'shared/new',:locals=>{:type=>"User"}}
##OR you can also try redirect in some rare cases WITHOUT respond_to block
redirect_to users_path(params[:id])