我在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界面中。
答案 0 :(得分:0)
Post.new创建一个新对象,但不会将其持久保存到数据库中。你需要使用Post.create!({:title =&gt; post_title,:body =&gt; post_body})。
Rake任务不会调用控制器,并且强参数不会在本地运行的rake任务中出现。它们可以保护您的应用程序免受大型,糟糕的互联网的侵害。