simple_form 未保存内容
simple_form not saving content
我正在尝试使用 simple_form
创建一个简单的博客应用程序
在我的 new.html.erb for Post 中,我有以下代码
<h3>Write your blog post here</h3>
<%= simple_form_for @post do |f| %>
<%= f.input :content %><br>
<%= f.submit %>
<% end %>
在index.html.erb中,我得到了
<%= @posts.each do |post| %>
<p>Post: <%= post.content %></p>
<% end %>
但是,我在 Post
的索引页上看到了以下内容
[#<Post id: 1, created_at: "2015-09-07 23:07:54", updated_at: "2015-09-07 23:07:54", content: nil>, #<Post id: 2, created_at: "2015-09-07 23:07:54", updated_at: "2015-09-07 23:07:54", content: nil>, #<Post id: 3, created_at: "2015-09-07 23:08:11", updated_at: "2015-09-07 23:08:11", content: nil>,
这是我的 Post 控制器
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
def new
@post = Post.new
end
def create
@post = Post.new(params[post_params])
if @post.save
success = true
message = "Nice!"
else
success = false
message = "Sucks!"
end
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:content)
end
end
这是我的模型
class Post < ActiveRecord::Base
belongs_to :user
end
最后,迁移以将内容列添加到 Post
class AddContentToPosts < ActiveRecord::Migration
def change
add_column :posts, :content, :string
end
end
在 Post 中输入文本后,我就可以创建它了。但是我不确定它是否像内容所说的那样被保存 "nil"。这非常令人沮丧,因为它看起来是一个非常简单的问题。经过几个小时试图弄清楚发生了什么,在这里寻求帮助......
谢谢!
你有两个问题:
首先,这一行:
<%= @posts.each do |post| %>
需要 <%
,而不是 <%=
。
<%=
输出表达式的结果。 array.each
的结果是一个数组,这就是您在浏览器中看到的结果。
其次,您对params
的访问是错误的。您正在使用
@post = Post.new(params[post_params])
您使用 params[:post]
,或者您使用 post_params
,但您不会同时使用两者。您正在尝试使用 post_params
的 return 值,它是键和值的散列, 作为键 再次访问 params
.您需要其中之一:
@post = Post.new(params[:post])
# or
@post = Post.new(post_params)
我正在尝试使用 simple_form
创建一个简单的博客应用程序在我的 new.html.erb for Post 中,我有以下代码
<h3>Write your blog post here</h3>
<%= simple_form_for @post do |f| %>
<%= f.input :content %><br>
<%= f.submit %>
<% end %>
在index.html.erb中,我得到了
<%= @posts.each do |post| %>
<p>Post: <%= post.content %></p>
<% end %>
但是,我在 Post
的索引页上看到了以下内容[#<Post id: 1, created_at: "2015-09-07 23:07:54", updated_at: "2015-09-07 23:07:54", content: nil>, #<Post id: 2, created_at: "2015-09-07 23:07:54", updated_at: "2015-09-07 23:07:54", content: nil>, #<Post id: 3, created_at: "2015-09-07 23:08:11", updated_at: "2015-09-07 23:08:11", content: nil>,
这是我的 Post 控制器
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
def new
@post = Post.new
end
def create
@post = Post.new(params[post_params])
if @post.save
success = true
message = "Nice!"
else
success = false
message = "Sucks!"
end
redirect_to root_path
end
private
def post_params
params.require(:post).permit(:content)
end
end
这是我的模型
class Post < ActiveRecord::Base
belongs_to :user
end
最后,迁移以将内容列添加到 Post
class AddContentToPosts < ActiveRecord::Migration
def change
add_column :posts, :content, :string
end
end
在 Post 中输入文本后,我就可以创建它了。但是我不确定它是否像内容所说的那样被保存 "nil"。这非常令人沮丧,因为它看起来是一个非常简单的问题。经过几个小时试图弄清楚发生了什么,在这里寻求帮助...... 谢谢!
你有两个问题:
首先,这一行:
<%= @posts.each do |post| %>
需要 <%
,而不是 <%=
。
<%=
输出表达式的结果。 array.each
的结果是一个数组,这就是您在浏览器中看到的结果。
其次,您对params
的访问是错误的。您正在使用
@post = Post.new(params[post_params])
您使用 params[:post]
,或者您使用 post_params
,但您不会同时使用两者。您正在尝试使用 post_params
的 return 值,它是键和值的散列, 作为键 再次访问 params
.您需要其中之一:
@post = Post.new(params[:post])
# or
@post = Post.new(post_params)