试图说明Turbo如何在Ruby on Rails中工作

xa9qqrwz  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(100)

我在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
有什么解决方法或者简单的例子吗?

92vpleto

92vpleto1#

你说你已经把表单嵌入到了索引视图中,我猜你的问题是你忘记在索引方法中设置@post,所以由form_with model: nil生成的表单将不会有post Package 属性(例如,post)。它们将是<input ... name="title">而不是<input ... name="post[title]">)-所以您的params.require(:post)失败了。
在没有看到代码的其余部分的情况下,很难确定,但我认为您可以在index操作中设置@post = Post.new

相关问题