Rails 3.2.8とSQLite 1.3.6を使用しています
データベース内のブール変数を変更する際に問題が発生しています
SQLite は "t" と "f" を true と false に変換します
この関数は:approved
属性を更新しません (デフォルトは false) 。
def activate
@user = User.find(params[:id])
if @user.update_attribute(:approved, 't')
redirect_to "/" #this is the return i get so the update returns true
else
render "/users?approved=false"
end
end
ただし、次のように文字列を変更@user.update_attribute(:email,'root@email.org')
すると、メールが更新されます
どうすればこれを修正できますか? ある種の sqlite アダプターが必要ですか?
私はすでにインストールactiverecord-jdbcsqlite3-adapter
していましたが、急いでアプリが廃止されたことに気付かなかったため、アプリが台無しになりました:P
私はこのスレッドを見つけました: Rails 3 SQLite3 Boolean false しかし、Rails と SQLite がレールの初心者として正しく通信するために何をする必要があるのか わかりません:)
また、これをWindows 7 x64で実行していることに言及する価値があると思います
アップデート
どうやらRailsは確かにSqliteと通信する方法を知っていますが、なぜ私のコードがブール値に対して機能しないのかわかりません笑
私の見解では、私は持っています:
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.email %></td>
<td><%= user.approved? %></td>
<td>
<% if !user.approved? %>
<%= link_to 'Approve', active_user_path(user), :method => :put %>
<% end %> </td>
</tr>
<% end %>
これにより、承認されていないすべてのユーザーとそれらをアクティブ化するためのリンクが一覧表示されます (bool を true に設定します)。
そして私のコントローラーには私が持っています
def activate
@user = User.find(params[:id])
if @user.update_attribute(:approved, true)
redirect_to "/" #this is the return i get so the update returns true
else
render "/users?approved=false" #this is not rendered
end
end
そして私のルート
match "users/:id/activate" => "users#activate", :as => "active_user"
これは、ユーザー名、アドレスなどの他の文字列では機能しますが、ブール値では機能しません