我正在使用 Rails 3.2.8 和 SQLite 1.3.6
我在更改数据库中的布尔变量时遇到了麻烦
SQLite 将“t”和“f”翻译为真假
此函数不会更新: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 正确通信,因为我是 Rails 中的新手 :)
我还认为值得一提的是,我在 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"
这适用于其他字符串,如用户名、地址等,但不适用于布尔值