我在Ruby on Rails中创建了一个小示例,试图了解Turbo在Ruby on Rails中的工作原理,这是我所做的:
这是index.html.erb,这里的想法是有一个表单,下面是创建的帖子列表
<p style="color: green"><%= notice %></p>
<h1>Posts</h1>
<%= turbo_frame_tag "post-feed" do %>
<h2>Create a new post:</h2>
<%= render "form" %>
<h2>Post Feed:</h2>
<%= render @posts %>
<% end %>
<%= link_to "New post", new_post_path %>
字符串
这是文件create.turbo_stream.erb
<%= turbo_stream.append "post-feed", partial: "posts/post", locals: { post: @post } %>
型
这是partial _form.html.erb,此表单嵌入在索引视图中:
<%= form_with(model: @post, data: { turbo_frame: "post-feed" }) do |form| %>
<div>
<%= form.label :title, style: "display: block" %>
<%= form.text_field :title %>
</div>
<div>
<%= form.label :body, style: "display: block" %>
<%= form.text_area :body %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
型
这是posts_controller.rb
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to posts_path }
format.turbo_stream
else
format.html { render :new }
format.turbo_stream { render turbo_stream: turbo_stream.replace(@post, partial: 'posts/post', locals: { post: @post }) }
end
end
end
# ...
def post_params
params.require(:post).permit(:title, :body)
end
型
但这是错误的,当我点击提交按钮:enter image description here
有什么解决方法或者简单的例子吗?
1条答案
按热度按时间92vpleto1#
你说你已经把表单嵌入到了索引视图中,我猜你的问题是你忘记在索引方法中设置
@post
,所以由form_with model: nil
生成的表单将不会有post
Package 属性(例如,post
)。它们将是<input ... name="title">
而不是<input ... name="post[title]">
)-所以您的params.require(:post)
失败了。在没有看到代码的其余部分的情况下,很难确定,但我认为您可以在
index
操作中设置@post = Post.new
。