我想更新嵌套的屬性但失敗,例如有一篇文章,並且一本書有很多評論。當我發現我寫的評論有一些錯誤,所以我想修改它。 這是我的代碼。如何更新表格中的嵌套屬性
在code_snippet.rb
:
class CodeSnippet < ApplicationRecord
has_many :annotations, dependent: :destroy
accepts_nested_attributes_for :annotations ,update_only: true ,reject_if: :all_blank, allow_destroy: true
end
在annotation.rb
:
class Annotation < ApplicationRecord
belongs_to :code_snippet
end
在code_snippet_controller.rb
:
def edit
@code_snippet = CodeSnippet.find(params[:id])
end
def update
@code_snippet = CodeSnippet.find(params[:id])
if @code_snippet.update(code_snippet_params)
redirect_to @code_snippet
else
render 'edit'
end
end
private
def code_snippet_params
params.require(:code_snippet).permit(:snippet)
end
在annotation.rb
:
def edit
@code_snippet = CodeSnippet.find(params[:code_snippet_id])
@annotation = @code_snippet.annotations.find(params[:id])
end
def update
@code_snippet = CodeSnippet.find(params[:id])
@annotation = @code_snippet.annotations.find(params[:id])
if @annotation.update(annotation_params)
redirect_to @code_snippet
else
render 'edit'
end
end
在 '視圖/ code_snippets/show.html.rb'
<div>
<h2>Annotations</h2>
<%= render @code_snippet.annotations %>
</div>
在 '視圖/註解/ _annotation.html.erb'
<p>
<strong>User:</strong>
<%= annotation.user %>
</p>
<p>
<strong>Line:</strong>
<%= annotation.line %>
</p>
<p>
<strong>Body:</strong>
<%= annotation.body %>
</p>
<p>
<%= link_to "Edit", edit_code_snippet_annotation_path(annotation.code_snippet,annotation) ,controller: 'annotation'%>
</p>
在「視圖/註解/編輯。 html.erb':
<%= form_for(@code_snippet) do |f| %>
<%= f.fields_for :annotation,method: :patch do |builder| %>
<p>
<%= builder.label :user %><br>
<%= builder.text_field :user %>
</p>
<p>
<%= builder.label :line %><br>
<%= builder.text_field :line %>
</p>
<p>
<%= builder.label :body %><br>
<%= builder.text_area :body %>
</p>
<p>
<%= builder.submit %>
</p>
<% end %>
<% end %>
什麼我想更新註釋而不改變codesnippets。我應該怎麼做來改變我的代碼。
它不起作用,如果我改變了field_for的註釋,它會顯示codesnippet的所有註釋,我只是想修改其中的一個。我有做這個添加在code_snippet_params annotations_params: ''' 私人 高清code_snippet_params params.require(:CODE_SNIPPET).permit(:片斷,annotations_params::用戶:行:正文]) 結束 ''' – AlexKIe