我的 Rails 專案有部分表格。此表單用于嵌套路由(發布和評論),并且此表單只會讓我制作新資料。編輯頁面的 url 效果很好,但是當我進入那個編輯頁面時,表單標簽寫成 -> posts/1/comment(方法:post),這讓我無法更新資料。我的預期結果是 -> posts/1/comment/1 (方法:put)
嵌套路由的表單->
<%= form_with model: [post, post.comments.build] do |f| %>
<div class="form-item-box">
<%= f.hidden_field :post_id %>
<%= f.label :content %>
<%= f.text_field :content %>
<% post.comments.build.errors.full_messages_for(:content).each do |error_message| %>
<div class="warning-box">
<%= error_message %>
</div>
<% end %>
<%= f.submit %>
</div>
<% end %>
編輯頁面->
<%= render partial: "form", locals: { post: @post } %>
在控制器上(測驗更新方法效果很好,所以我沒有寫它。唯一的問題是表單標簽一直都是作為發布方法構建的。)
def edit
@post = Post.find(params[:post_id])
end
這個編輯表單鏈接在帖子的顯示頁面中,我在 postcontroller 中寫了@post
def show
@post = Post.find(params[:id])
end
路線
resources :posts do
resources :comments
end
我該如何解決?
部分表單構建為 -> posts/1/comment (method: post) 我的預期結果是 -> posts/1/comment/1 (method: put)
我嘗試更改 glocal 變數的變數,更改非嵌套的形式(它有效,但我認為使用嵌套路由適合這種情況)
uj5u.com熱心網友回復:
我認為你的錯誤在這里:
<%= form_with model: [post, post.comments.build] do |f| %>
因為post.comments.build你總是在發起一個新的評論,因此創建一個表單來創建一個新的評論 (POST),它不會更新任何東西,因為它還不存在。不是 100% 確定您的應用程式的邏輯,但如果您想要一個表單來編輯每個帖子評論 (PUT),您將需要執行以下操作:
<% post.comments.each do |comment| %>
<%= form_with model: [post, comment] do |f| %>
<% #.....
最壞的情況,您還可以手動設定表單的屬性,例如:
<%= form_with(model: comment, url: edit_post_comment_path(post, comment), method: "put") %>
uj5u.com熱心網友回復:
嵌套路由表單 ->
<%= form_with model: [post, comment] do |f| %>
<div class="form-item-box">
<%= f.hidden_field :post_id %>
<%= f.label :content %>
<%= f.text_field :content %>
<% comment.errors.full_messages_for(:content).each do |error_message| %>
<div class="warning-box">
<%= error_message %>
</div>
<% end %>
<%= f.submit %>
</div>
<% end %>
編輯頁面->
<%= render partial: "form", locals: { post: @post, comment: @comment } %>
評論控制器->
def edit
@post = Post.find(params[:post_id])
@comment = Comment.find(params[:id])
end
post_controller ->
def show
@post = Post.find(params[:id])
@comment = Comment.new(post: @post)
end
現在作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/533084.html
