在自定义Rake任务中访问Rest操作

时间:2014-07-15 14:05:33

标签: ruby ruby-on-rails-4 automation rake

我在Rails 4.1中运行了一个小型博客应用。它允许用户登录,然后创建,编辑和删除带有标题和正文的基本帖子。它完全通过用户界面运行。

我正在尝试编写自定义rake任务(稍后将附加到chron作业)以自动创建帖子。现在我有这个:

namespace :blog do
 desc "Automatically post to all users accounts"
 task auto_post: :environment do

   post_title = "Automated Blog Post Title"
   post_body = "Hello World!"

   Post.create!({:title => post_title,
             :body => post_body})

  end
end 

最好我知道它正确命名空间等,并且可以使用rake blog:auto_post运行。 Post的控制器如下所示:

class PostsController < ApplicationController

  def index
    @posts = current_user.posts
  end

  def new
    @post = Post.new
  end

  def create
    @post = Post.new post_params
    if @post.save
      current_user.posts << @post
      flash[:notice] = "New post created!"
      redirect_to posts_path
    else
      render 'new'
    end
  end

  def edit
    @post = Post.find params[:id]
  end

.....

private
  def post_params
    params.require(:post).permit(:title, :body)
  end
end

根据我的理解,我应该能够将:title:body传递给Post.new行动,让它发挥作用。我怀疑我没有正确地与强参数交互。任何人都可以帮我解决这个问题。

编辑:我的psql显示帖子到达数据库,所以我关闭了。不知道为什么他们没有出现在app界面中。

1 个答案:

答案 0 :(得分:0)

Post.new创建一个新对象,但不会将其持久保存到数据库中。你需要使用Post.create!({:title =&gt; post_title,:body =&gt; post_body})。

Rake任务不会调用控制器,并且强参数不会在本地运行的rake任务中出现。它们可以保护您的应用程序免受大型,糟糕的互联网的侵害。