如何解决如何在 rails 6
我尝试更新子模型失败,以某种方式嵌套但得到异常结果。
背景(向下滚动问题):
更新 verified
模型的布尔值 reviews
以将翻译是否经过验证与翻译 entry
和 user
模型关联引用相关联。有关创建验证的详细信息是 here
# routes.rb
resources :entries do
resources :reviews
end
# entry.rb
belongs_to :user
has_one :review
accepts_nested_attributes_for :review
# user.rb
has_many :entries
has_many :reviews
# review.rb
belongs_to :user
belongs_to :entry
从 entry
索引,将 entry
实例传递给编辑部分,完美运行
# /entries/index.html.erb
<% @entries.each do |entry| %>
...
<% if entry.review %>
<%= render 'reviews/edit',entry: entry %>
<% end %>
...
<% end %>
_edit.html.erb
形式似乎正确...
# reviews/_edit.html.erb
<span>
<%= form_for([entry,entry.review]) do |f| %>
<div class="form-check form-switch">
<%= f.check_Box :verified,class: "form-check-input" %>
</div>
<%= f.submit class: "btn btn-primary"%>
<% end %>
</span>
在浏览器控制台中,模型 entry
被很好地分配。并且关联 entry.review
也被很好地分配,即
>> entry.review
=> #<Review id: 4,user_id: 1,entry_id: 19,verified: false,created_at: "2021-02-18 03:43:27",updated_at: "2021-02-18 14:31:15">
即使使用 Ruby on Rails 6
已弃用的方法 update_attribute
也有效
>> entry.review.update_attribute(:verified,false)
=> true
问题: update
中的 reviews_controller.rb
方法在 verified
为 true
时成功执行,但在 false
# reviews_controller.rb
def update
@entry.review.update(review_params)
end
private
def review_params
params.require(:review).permit(:verified,user: current_user,entry: @entry)
end
作品
{"_method"=>"patch","authenticity_token"=>"...","review"=>{"verified"=>"1"},"commit"=>"Update Review"}
但不是
{"_method"=>"patch","review"=>{"verified"=>"0"},"commit"=>"Update Review"}
解决方法
我想我在@yzalavin 建议后发现了问题。不知何故,验证阻止了更新。我还不知道这个协会。
只需添加 on: :create
即可让我更新。
validates_presence_of :entry_id,:user_id,:verified,on: :create
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。