所以我一直在试用几种不同的方法将我的iPhone应用程序连接到我的ROR restful后端,所有这些似乎都能正常工作,用'get'请求下拉数据(json),但是在发布时我无法这样做。我尝试过ObjectiveResource和其他两三个人,他们都有同样的问题。我在想我的ROR应用程序设置错误了吗?我注意到所有示例iPhone项目都使用https用于生产应用程序,生产应用程序是否需要https用于iPhone才能建立会话并能够发布?
如果我使用http://localhost:3000/posts
,这就是我得到的错误处理PostsController #create(适用于2011-04-05 20:49:42的127.0.0.1)[POST] 参数:{“post”=> {“budget”=>“222”}} 用户兴趣哈希:false
NoMethodError(未定义的方法posts' for false:FalseClass):
app/controllers/posts_controller.rb:113:in
创建'
处理PostsController #index(适用于2011-04-05 20:49:42的127.0.0.1)[POST] 参数:{“post”=> {“budget”=>“222”}}
这是我的Create方法: def创建 #@ post = Post.new(params [:post]) @post = current_user.posts.build(params [:post])
respond_to do |format|
if @post.save
flash[:notice] = 'Post was successfully created.'
format.html { redirect_to(@post) }
format.xml { render :xml => @post, :status => :created, :location => @post }
format.json { render :json => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
format.json { render :json => @post.errors, :status => :unprocessable_entity }
end
end
端
以下是方法:
# POST /posts
# POST /posts.xml
def create
#@post = Post.new(params[:post])
@post = current_user.posts.build(params[:post])
respond_to do |format|
if @post.save
flash[:notice] = 'Post was successfully created.'
format.html { redirect_to(@post) }
format.xml { render :xml => @post, :status => :created, :location => @post }
format.json { render :json => @post, :status => :created, :location => @post }
else
format.html { render :action => "new" }
format.xml { render :xml => @post.errors, :status => :unprocessable_entity }
format.json { render :json => @post.errors, :status => :unprocessable_entity }
end
end
端
Iphone通话:
// CRUD methods using Resource.h
- (void)createRemote {
NSString *url =
[NSString stringWithFormat:@"%@/posts", siteURL];
[Resource post:[self params] to:url];
}
%@ /帖子等于http://localhost:3000/posts
答案 0 :(得分:1)
您是否在ApplicationController上设置了protect_from_forgery
?
除了您网站上的表单外,这基本上会杀死任何地方的POSTing信息。尝试评论它,看看事情是否开始奏效。
答案 1 :(得分:1)
正如peterjb所说,检查伪造保护。如果您使用的是rails 3,请在application.html.erb中查找csrf_meta_tag
。
答案 2 :(得分:0)
https - 不是必须的,它是您的服务器配置以满足安全需求的方式。你可以让http和https都没有问题。
我建议你看看ROR应用程序端的日志也知道你得到的HTTP POST数据 - 如果你无法在ROR应用程序中获取任何数据,请发布一些从你的iPhone发出POST请求的代码,人们可以更好地分析它。