1

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"

これは、ユーザー名、アドレスなどの他の文字列では機能しますが、ブール値では機能しません

4

2 に答える 2

1

approved@userの列がブール値の場合は、true/false を渡して、データベース アダプターに判断させる必要があります。

@user.update_attribute(:approved, true)
于 2012-11-03T20:41:59.130 に答える
0

ユーザーテーブルへの整数移行を使用してこれを解決しました。なぜ@user.update_attribute(:approved, true)データベースに保存しなかったのか、セットアップに関係していたに違いない理由がわかりません

私は移行add_column :users, :is_approved, :integer, :default => 0を行い、ユーザーをアクティブにしたいときは、整数値を1に反転するだけです

于 2012-11-06T12:14:14.550 に答える