簡體   English   中英

未通過update_attributes方法更新Rails模型的某些屬性

[英]Some attributes of Rails model not being updated by update_attributes method

剛開始使用Rails 4.1,當我嘗試使用update_attributes方法更新模型時,我很難理解正在發生的事情。 我編寫了一個小應用程序來學習,使用戶可以查看啤酒。 用戶可以使用如下形式的表單編輯評論:

<%= form_for review do |f| %>
<%= f.label :rating %>
<%= f.select :rating, 1..5%>
<%= f.label :review_text %>
<%= f.text_area :review_text %>
<%= hidden_field_tag :beer_id, @beer.id %>
<%= hidden_field_tag :on_wishlist, "f" %>
<%= f.submit %> 
<% end %>

控制器具有一個簡單的更新操作,如下所示:

@review.update_attributes(review_params)

參數如下所示:

def review_params
    params.require(:review).permit(:rating, :user_id, :beer_id, :review_text, :on_wishlist)
end

一切都很簡單。 我無法弄清楚的是為什么這只能更新某些屬性。 特別是on_wishlist屬性不會更新。 如果查看服務器日志,則會看到以下內容:

參數:{...“ review” => {“ rating” =>“ 5”,“ review_text” =>“多么好的啤酒”},“ beer_id” =>“ 4”,“ on_wishlist” =>“ f “,” commit“ =>”更新評論“,” id“ =>” 7“}

...

SQL(0.5ms)UPDATE“審閱” SET“評級” =?,“ review_text” = ?,“ updated_at” =? WHERE“評論”。“ id” = 7 [[“評分”,5],[“評論文字”,“多么好的啤酒”],[“ updated_at”,“ 2015-01-15 22:51:56.009256”] ]

因此,我可以看到on_wishlist隱藏字段已發送到服務器,即使未包含在更新中,即使它位於review_params哈希中。

如果將控制器代碼更改為以下代碼,則可以正常工作:

@review.update_attributes(review_params)
@review.on_wishlist = params[:on_wishlist]
@review.save

但是我不明白為什么on_wishlist應該單獨對待。 我能想到的唯一相關的細節是,on_wishlist是在與其余評論分開的遷移中添加的,如下所示:

class AddOnWishlistToReviews < ActiveRecord::Migration
  def change
    add_column :reviews, :on_wishlist, :bool, :default => false
  end
end

我確定我缺少一些簡單的東西-感謝您的幫助。

這是因為您在表單中將beer_idon_wishlist定義為單獨的字段。 使用對象形式f定義的其他字段。

您可以在參數中看到已發送到服務器,您只有:

"review"=>{"rating"=>"5", "review_text"=>"What a good beer"}

因此,您的對象@review只能更新這些字段。 review_params實際上是params[:review]

因此,如果您想更新beer_idon_wishlist ,則可以使用f對象使這些字段屬於表單中的對象:

<%= f.hidden_field :beer_id, value: @beer.id %>
<%= f.hidden_field :on_wishlist, value: "f" %>

或更改它們的名稱:

<%= hidden_field_tag :beer_id, @beer.id, name: 'review[beer_id]' %>
<%= hidden_field_tag :on_wishlist, "f", name: 'review[on_wishlist]' %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM