さて、私はここで何が間違っているのか理解できません
私はユーザーが管理者によって承認されているこのアプリを持っています、そしてこれは数日前までうまく機能していました
私の見解では、ユーザーコントローラーを呼び出すリンクがあります
<%= link_to 'Approve', active_user_path(user), :method => :put %>
これがそのリンクの私のcustumルートです
match "users/:id/activate" => "users#activate", :as => "active_user"
今私のユーザーコントローラーで私はこのアクティベートメソッドを持っています
def activate
@user = User.find(params[:id])
puts @user.name #the correct name is displayed
puts @user.is_approved.inspect.to_i #:is_approved is 0
if @user.update_attribute(:is_approved, 1)
puts @user.is_approved.inspect # :is_approved is 1
@user.activate_user
puts @user.is_approved.inspect # :is_approved is 1
@user.save!
redirect_to "/users?is_approved=0"
else
render "/" # dosn't matter
end
end
ここで3回保存しようとしましたが(update、activate_user、save!)、それでも値は保存されません。usersis_approved
フィールドはまだ0ですが、どうすれば可能ですか?
これが私のモデルメソッドです
def activate_user
self.is_approved = 1
self.save
end
ところで、私はこのメソッドで文字列を更新できますが、整数は更新できません(trueとfalseのどちらも機能しません)
私のモデルではis_approved
、attr_accessibleとattr_accessorの両方があります
ソリューション
これは厄介ですが、私のユーザーモデルattr_accessor :approved
では、モデルがデータベースに移動して:approved
列を更新することはありませんでしたが、代わりにローカル変数が更新された:approved
ため、次に列を確認したときに、もちろん:approved
値は変更されていません
tldr?モデルにattr_accessorがあり、更新しようとしている列と同じ名前の場合=>削除します