如何使用默认值 false 向现有数据库添加布尔值 true false 列?(可以说 user_agreement 的复选框)
我现有的表:
create_table "users", :force => true do |t|
t.string "name"
t.string "email"
end
Run Code Online (Sandbox Code Playgroud)
之后我该怎么办?我应该做这样的事情吗?
html:
<%= check_box_tag "user_agreement[]" %>
Run Code Online (Sandbox Code Playgroud)
控制器:
if params[:user_agreement] == '1'
user = User.find_by_id(params[:id])
user.update_attribute(:user_agreement, true)
flash[:success] = "accepted agreement"
else
user = User.find_by_id(params[:id])
user.update_attribute(:user_agreement, false)
flash[:success] = "didn't accepted agreement"
end
Run Code Online (Sandbox Code Playgroud)
首先,您需要运行迁移以将该列添加user_agreement
到您的用户模型中:
$ rake generate migration AddUserAgreementToUsers user_agreement:boolean
Run Code Online (Sandbox Code Playgroud)
打开您刚刚生成的迁移文件并添加默认值false
:
db/migrate/_add_user_agreement_to_users.rb
class AddUserAgreementToPeople < ActiveRecord::Migration
def change
add_column :people, :user_agreement, :boolean, default: false
end
end
Run Code Online (Sandbox Code Playgroud)
运行迁移以对数据库进行更改:
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/users_controller.rb
如果您正在运行 Rails 4,则需要添加user_agreement
到您将接受的参数列表中:
private
def user_params
params.require(:user).permit(:name, :email, :user_agreement)
end
Run Code Online (Sandbox Code Playgroud)
最后添加user_agreement
到您的表单中。
应用程序/视图/用户/_form.html.erb
<%= form_for @user %>
...
<%= f.check_box :user_agreement %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)