1

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

后控制器.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

对于我的控制器,我如何从客户端获取数据。从这里我只需要在客户端写入 url 也像这样"http://localhost:3000/posts"

4

4 回答 4

0

我得到了我的问题的解决方案,什么在 def create 动作中使用正确的参数

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

参数也应该与客户端给定参数相同。

于 2013-06-12T10:33:51.423 回答
0

看来如果帖子保存成功,您将获得创建的帖子。但是如果保存失败,那么您将面临一些帖子

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

但使用响应:

format.json { render json: @post.errors, status: :unprocessable_entity }

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

于 2013-06-12T10:30:30.110 回答
0

您想创建一个名为new

在新方法中获取所有用户输入并将其传递给创建方法。

新方法:

def new
    @post = Post.new
 end

创建方法:

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

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

首先阅读 Rails 文档以了解 CURD 操作。

编辑:

在 routes.rb 中:

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

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

于 2013-06-11T05:18:15.017 回答
0

确切地说,这就是正常的 ruby​​ on rails crud 操作遵循的风格。

让我说清楚..

如果要在表 USERS 中创建记录,可以说字段是“名称”和“年龄”,客户端中的参数不必与表的字段相同。

在上述情况下,我们已经处理了控制器中的保存,框架不接受它。在客户端说“x”代表姓名,“y”代表年龄,然后在客户端内置并传递给服务器的参数是 params=>{:post=>{:x=>"siva", :y => “23”}}

在控制器中。user=User.new user.name=params[:post][:x] user.age=params[:post][:y] user.save

于 2013-06-12T10:56:25.187 回答