iPhone无法发布到我的rails应用程序

时间:2011-03-25 04:51:37

标签: iphone ruby-on-rails objective-c ios

所以我一直在试用几种不同的方法将我的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创建'

如果我使用http://localhost:3000

处理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

3 个答案:

答案 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请求的代码,人们可以更好地分析它。