我的应用程序目前只处理HTML请求,我想扩展一些操作来处理JSON请求。许多控制器操作执行重定向,根据请求是否成功设置会话值(闪存)。
如何根据请求格式合并responds_to以更改操作行为,例如:
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = {:success => "User Created."}
session[:user_id] = @user.id
session[:username] = @user.username
redirect_to(:controller => 'lists', :action => 'index')
else
flash[:notice] = {:error => @user.errors}
render('new')
end
end
因此,您可以看到我正在检查模型是否持久化,然后重定向或再次呈现表单。如何维护此当前行为,还能处理JSON中的请求? JSON请求不需要执行重定向等。
谢谢!
答案 0 :(得分:1)
我的申请中有类似的要求。我选择为JSON API创建一组不同的控制器,因为HTML和JSON控制器的共同点很少。它还使得使用特定于API构建的Gems和JSON(在我的情况下为RocketPants)更简单。
答案 1 :(得分:1)
这似乎可以解决问题:
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = {:success => "User Created."}
session[:user_id] = @user.id
session[:username] = @user.username
respond_to do |format|
format.json {render :json => @user}
format.html{redirect_to(:controller => 'lists', :action => 'index')}
end
else
flash[:notice] = {:error => @user.errors}
respond_to do |format|
format.json {render :json => @user.errors}
format.html{render('new')}
end
end
end