在railscast #160 base code工作我设置了一个非常简单的网站,允许我登录,注销和注册帐户。 (它几乎完全相同,只是我从用户迁移表和相关视图中删除了'用户名',因此只需要一个电子邮件地址)
我现在正在尝试创建一个新的登录操作,以便我可以通过JSON登录。
我希望能够向http://app:3000/apilogin?email=my@email.com&password=p4ssw0rd
发送获取请求,并让rails应用程序存储请求来自的IP地址(如果登录正确)并发送相关响应(使用JSON) )。
到目前为止,我已向controllers/user_sessions_controller.rb
添加了一个部分,以便它:
class UserSessionsController < ApplicationController
#...
def new_api
respond_to do |format|
format.json
end
end
end
至routes.rb
:
map.apilogin "apilogin", :controller => "user_sessions", :action => "new_api"
但我对views/user_sessions/new_api.json.rb
中的内容感到茫然!你能帮忙吗?
答案 0 :(得分:4)
您根本不需要定义视图 - 只需从控制器返回适当的json。
def new_api
@user_session = UserSession.new({:email => params[:email], :password => params[:password]})
respond_to do |format|
if @user_session.save
format.json { render :json => {:success => true} }
else
format.json { render :json => {:success => false, :message => 'incorrect username or password'}, :status => :unauthorized }
end
end
end
答案 1 :(得分:0)
您可以这样做:
def new_api
respond_to do |format|
format.json { render :json => user.slice(:name).to_json }
end
end
或者您也可以在views/user_sessions/new_api.json.erb
中生成JSON,就像编写普通的erb代码一样。不过不是一个好主意:
{"name":"<%= @user.name %>"}