Rails 4.1을 시작하면서 update_attributes 메소드를 사용하여 모델을 업데이트하려고 할 때 어떤 일이 벌어지고 있는지 이해하는 데 어려움을 겪고 있습니다. 나는 사용자가 맥주를 리뷰 할 수있게하는 작은 앱을 작성했다. 사용자는 다음과 같습니다 양식을 사용하여 리뷰를 편집 할 수 있습니다Rails 모델의 일부 속성이 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"=> "5", "review_text"=> "What a good beer" } "beer_id"= ""4 ","on_wishlist "=>"F "는 =>"업데이트 리뷰 ","ID "=" "7"}
...
"커밋"SQL (0.5ms) UPDATE "리뷰"SET "rating"=?, "review_text"=?, "updated_at"=? "리뷰", "id"= 7 [[ "rating", 5], [ "review_text", "좋은 맥주"], [ "updated_at", "2015-01-15 22 : 51 : 56.009256"] ]
review_params 해시에 있어도 업데이트에 포함되지 않은 on_wishlist 숨김 필드가 서버로 전송되는 것을 볼 수 있습니다.
@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
내가 뭔가 간단한 누락 확신 - 당신의 도움에 대한 감사 .
아, 나는 내가 간과하고있는 것이 무엇인지 간단하다는 것을 알았다. 고마워, 정말 고마워. – dayman