微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 rails 6

如何解决如何在 rails 6

我尝试更新子模型失败,以某种方式嵌套但得到异常结果。

背景(向下滚动问题):

更新 verified 模型的布尔值 reviews 以将翻译是否经过验证与翻译 entryuser 模型关联引用相关联。有关创建验证的详细信息是 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"}

Working

但不是

{"_method"=>"patch","review"=>{"verified"=>"0"},"commit"=>"Update Review"}

not Working

解决方法

我想我在@yzalavin 建议后发现了问题。不知何故,验证阻止了更新。我还不知道这个协会。

只需添加 on: :create 即可让我更新。

validates_presence_of :entry_id,:user_id,:verified,on: :create

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。