如何在rails中的ruby中使用Post方法来获取动作以获取数据

时间:2013-06-11 05:10:54

标签: ruby-on-rails ruby ruby-on-rails-3 post

我想通过在我的控制器中的create action中使用post方法从客户端获取数据到ruby on rails。但是我不知道如何在def create action中从客户端获取数据。如何创建api for从客户端获取数据。

Postcontroller.rb

class PostsController < ApplicationController
respond_to :json, :xml

  before_filter :load

  def load
    if signed_in?
      @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
      @my_post = current_user.posts.new
    end
    @posts = Post.paginate(page: params[:page],:per_page => 10)
    @post = Post.new
  end


  def index
    @posts = Post.all
    respond_with(@posts) do |format|
      format.json { render json: @post_names = {:post => @posts.as_json(:only=> :content)} }
    end
  end 

  def show
    if signed_in?
      @post = Post.find(params[:id])
      @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
      current_user.vote_for(@post)
    else
    @post = Post.find(params[:id])
    Guest.find(1).vote_for(@post)
    end
    @posts = Post.paginate(page: params[:page],:per_page => 10)  
    @guest = Guest.new
    @user = User.new
    @users = User.paginate(page: params[:page],:per_page => 10)
  end

  def create 
    @post = Post.new(params[:post])
     respond_to do |format|
    if @post.save
      @posts = Post.paginate(page: params[:page],:per_page => 10)
      format.json { render json: @post, status: :created }

    else 
      @posts = Post.paginate(page: params[:page],:per_page => 10)
      format.json { render json: @post.errors, status: :unprocessable_entity }

    end
    @guest = Guest.new
    @users = User.paginate(page: params[:page],:per_page => 10)
 end
  end

  def my_prayer_create     
      @my_post = current_user.posts.new(params[:post])
      @post = Post.new(params[:post])
      @guest = Guest.new
      @user = User.new
      @users = User.paginate(page: params[:page],:per_page => 10)
      if @my_post.save
        flash[:notice] = "Prayer Successfully created."
        @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
      else 
        flash[:notice] = "Error"
        @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
      end
  end

  def edit
    if signed_in?    
    @my_post = current_user.posts.find(params[:id])
    else
    @post = Post.find(params[:id])
    end
  end

  def update
    if signed_in? 
      @my_post = current_user.posts.find(params[:id])
      if @my_post.update_attributes(params[:post])
        flash[:notice] = "Prayer Successfully updated."
        @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
      end
    else  
    @post = Post.find(params[:id])
    end
  end

  def destroy
    if signed_in? 
      @my_post = current_user.posts.find(params[:id])
      @users = User.paginate(page: params[:page],:per_page => 10)
      @guest = Guest.new
      @my_post.destroy
      flash[:notice] = "Prayer Successfully destroyed."
      @my_posts = current_user.posts.paginate(page: params[:page],:per_page => 10)
    end
  end

对于我的控制器,我如何从客户端获取数据。从此我只需要在我的客户端编写网址,就像这样"http://localhost:3000/posts"

4 个答案:

答案 0 :(得分:0)

您想要创建一个名为new

的方法

获取新方法中的所有用户输入并将其传递给create方法。

新方法:

def new
    @post = Post.new
 end

创建方法:

@post = Post.new(params[:post])

params [:post]传递所有参数并将其保存为@post.save

首先阅读有关CURD操作的rails doc。

编辑:

在routes.rb中:

match '/action' => "controller#action"

为新方法编写视图文件以获取"views/controller/new.html.erb"

中的使用输入

答案 1 :(得分:0)

似乎如果帖子保存成功,您将获得创建帖子。但如果保存失败,那么你正面临一些帖子

   @posts = Post.paginate(page: params[:page],:per_page => 10)

但使用:

进行回复
format.json { render json: @post.errors, status: :unprocessable_entity }

因此,如果你想在帖子保存失败时获得一些帖子,那么它必须回复@posts

答案 2 :(得分:0)

我为我的问题找到了解决方案,在def create action中使用正确的参数

def create

  @post = Post.create(params[:post])
   #@post = Post.create(:content=>params[:post][":content"],:title=>params[:post][":title"])
   respond_to do |format|
    if @post.save
      @posts = Post.paginate(page: params[:page],:per_page => 10)
      format.json { render json: @post, status: :created }

    else
      @posts = Post.paginate(page: params[:page],:per_page => 10)
      format.json { render json: @post.errors, status: :unprocessable_entity }

    end
    @guest = Guest.new
    @users = User.paginate(page: params[:page],:per_page => 10)
 end
  end

params应该与客户端给定参数一样。

答案 3 :(得分:0)

准确而准确..这就是铁轨上的正常红宝石样式所遵循的风格。

让我说清楚..

如果你想在表USERS中创建一个记录,可以说字段是“name”和“age” 客户端的参数不必与表格的字段相同。

在上面的例子中我们已经处理了控制器中的保存,框架没有采取它。 在客户端'x'表示名称,'y'表示年龄 然后在客户端构建并传递给服务器的params说params =&gt; {:post =&gt; {:x =&gt;“siva”,:y =&gt; “23”}}

在控制器中。     用户= User.new     user.name =参数[:交] [:X]     user.age =参数[:交] [:Y]     user.save