我想通过在我的控制器中的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"
答案 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